# Suchen nach Autowerten in Access-DB



## GeorgeWAR (26. Feb 2007)

Hallo zusammen,

mein erste Post hier (da werden sicherlich noch einige folgen)   

Habe schon die Boardsuche bemüht, allerdings hab ich nicht exakt das gefunden, was ich suche.

Folgendes:

Ich habe in Java eine Autovermietung gemacht.
Die Daten sind in einer Access-DB gespeichert.
Nummeriert wird mit Autowert in der Spalte "Nummer".

Autos anlegen geht wunderbar mit "INSERT INTO PKW (Spaltennamen à la Marke, Modell, ...) VALUES (eingegebene Werte);"

Wenn ich nun allerdings ein Auto löschen will, soll die dazugehörige SchlüsselNr. (Access-DB wird in einer JTable angezeigt) eingegeben werden und nach dieser in der Access-DB gesucht und ggf. gelöscht werden.

Allerdings funktioniert es nicht!

Suche ich nach Marke oder Modell (mit "DELETE FROM PKW WHERE Marke = Mercedes" funktioniert es.

Es scheint mir, als ob es an dem Autowert liegt. Was mache ich falsch?

Danke,
George


----------



## DP (26. Feb 2007)

Hallo und willkommen im Forum!

Von welchem Typ ist das Feld SchlüsselNr?!


----------



## GeorgeWAR (26. Feb 2007)

In der DB: Autowert mit Präfix (P für PKW, L für LKW, und B für Bike - also bspw. L001)

Eingelesen wird die Nummer als String (da es ja keine Nummer ist).


----------



## DP (26. Feb 2007)

probier mal 


```
...where myFeld = 001
```

oder


```
...where myFeld = 'L001'
```


----------



## GeorgeWAR (26. Feb 2007)

Das funktioniert: 
	
	
	
	





```
... where Nummer = 001;
```

Hier: 
	
	
	
	





```
... where Nummer = P001;
```
 kommt ein Fehler, dass ein Paramter zu wenig übergeben wurde.

1. Das Löschen soll ja per Nutzereingabe geschehen und nicht "fest" im Code, also bringt mir das leider nix.
2. Die Nutzereingabe soll (bspw.) "P001" lauten, also muss auch "P001" (als String) eingelesen und an die DB übergeben werden. Man könnte es umständlich machen und denn ersten Buchstaben des eingelesen String wegkürzen und das dann in Integer umwandeln... Aber muss das sein?[/code]

EDIT:

Es geht nun auch per Nutzereingabe, aber man muss das P weg lassen:


```
public void loeschePKW(String identNr) throws Exception
{
neuDB.oeffneDB();
mSQL = "DELETE FROM PKW WHERE Nummer = "+identNr+";";
neuDB.aendern(mSQL);
neuDB.schliesseDB();
}
```

Wie gesagt, eingelesen wurde ein String.


----------



## DP (26. Feb 2007)

was steht denn definitiv in der datenbank? P100 oder 100?


----------



## GeorgeWAR (26. Feb 2007)

In der Spalte "Nummer" steht korrekt: P001, P002, P003...

Als Format: P000


----------



## DP (26. Feb 2007)

ja dann musst du dein where-argument in doppelte oder einfache anführungszeichen setzen (keine ahnung was eckes erwartet).


----------



## yajp (27. Feb 2007)

Hallo,
wenn der Datentyp in Access 'Autowert' ist dann ist definitiv eine Zahl dahinter,
zum String der übergeben wird kommt es imho deswegen dazu weil ein (Anzeige) Format P000 festgelegt ist.

Also entweder das Anzeigeformat ober ne View (in Access Abfrage) 'verwenden' und in der Tabelle rausnehmen
oder wirklich aus dem String ne Zahl machen....

hth


----------



## GeorgeWAR (27. Feb 2007)

@yajp: Ich kann dir leider nicht folgen. Könntest du mir das kurz codieren? Ich möchte den von mir definierten Autowert in Access beibehalten. Wie suche ich nun danach?

@dp: Nun, wenn ich nach Marke oder Modell suche (also nach einem 100%igen String) funktioniert es ja.


----------



## AlArenal (27. Feb 2007)

Kann mir jemdn einen Grund nennen, warum man eine neue Anwendung in Java erstellt, die zugehörige DB aber mit Access? Das wäre ja als würde ich mir nen BMW kaufen und müsste zusätzlich nen Mercedes bestellen, um dessen Sitze in den BMW einzubauen...


----------



## DP (27. Feb 2007)

kannst du die access-db mal irgendwo zum download bereitstellen? kann ja nicht so schwer sen da nen satz zu löschen


----------



## DP (27. Feb 2007)

AlArenal hat gesagt.:
			
		

> Kann mir jemdn einen Grund nennen, warum man eine neue Anwendung in Java erstellt, die zugehörige DB aber mit Access? Das wäre ja als würde ich mir nen BMW kaufen und müsste zusätzlich nen Mercedes bestellen, um dessen Sitze in den BMW einzubauen...



weil man kein rdbms ausliefern/installieren will?


----------



## AlArenal (27. Feb 2007)

DP hat gesagt.:
			
		

> weil man kein rdbms ausliefern/installieren will?



Java DB aka Derby, HSQLDB, H2, ... das Thema hatten wir doch schon oft genug. Und ohne Installation wirds auch schwierig Access zu benutzen


----------



## DP (27. Feb 2007)

klar hatten wir das oft genug. trotzdem gibt es genug gründe um eckes zu nehmen. 

installation?! nur nen odbc-eintrag und feierabend.


----------



## yajp (27. Feb 2007)

@ threadersteller

Ich weiss grad net was ich codieren soll ;-)

Der Autowert in Access ist ein Long Integer also für P001 tatsächlich nur 1

Durch das definierte Anzeigeformat P000 wird das so angezeigt und kommt als String in Java an.

Für Dein Delete nützt Dir der aber nix weil tatsächlich 1 gespeichert ist und nicht P001

Ich würde das Anzeigeformat nicht in der DB lassen sondern in deinem Java-Prog über eine entsprechende getMethode() nachbilden...

hth


----------



## AlArenal (27. Feb 2007)

DP hat gesagt.:
			
		

> klar hatten wir das oft genug. trotzdem gibt es genug gründe um eckes zu nehmen.
> 
> installation?! nur nen odbc-eintrag und feierabend.



Installation HSQLDB & Co. => Nada

Außerdem habe ich nach eben den Gründen ja gefragt und welche das im Falle des Threaderstellers sein sollen, konntest du mir auch nicht nicht beantworten


----------



## GeorgeWAR (27. Feb 2007)

@alarenal: Dies ist eine Projektanforderung  :? 

@dp: Stelle ich heut nachmittag on, bin grad auf Arbeit.

@yajp: Richtig, das Format ist long.

@all: Danke für eure Hilfe, heut nachmittag stell ich die dazugehörigen Codeschnipsel und die DB on.


----------



## GeorgeWAR (27. Feb 2007)

Wollte nur mitteilen, dass ich es nun mit ganz normalen Integern mache und das Problem einfach umgehe  :applaus:


----------



## DP (27. Feb 2007)

GeorgeWAR hat gesagt.:
			
		

> und das Problem einfach umgehe  :applaus:



na das ist doch mal ein lösungsweg. wenn bloß alles im leben so einfach wäre :lol:


----------



## GeorgeWAR (27. Feb 2007)

Mit einer guten Benutzerführung in der GUI kann man sowas schon umgehen...hoffe ich jedenfalls. Morgen steht Bugsuche an


----------

