Problem mit dem Auslesen eines leeren Feldes aus einer Access DB
-
Ich versuche aus einer bestehenden Datenbank über eine Suche Werte in einer andere Datenbank zu schreiben
Wenn ich nun versuche ein leeres Feld zu lesen -->
String text;
frmbaumschule-> adobaumschule->FieldByName("Text")->Value;
text=frmbaumschule-> adobaumschule->FieldByName("Text")->Value;bekomme ich den Fehler:
Variante des Typs (Null) konnte nicht in Typ (String) konvertiert werden.Das Feld was ich auslesen möchte ist nicht sehr oft ausgefüllt.
Nun habe ich versucht über eine IF Schleife das Feld vorher auszulesen ob es leer ist -->if ((frmbaumschule->adobaumschule->FieldByName("Text")->Value) = Null)
oder
if ((frmbaumschule->adobaumschule->FieldByName("Text")->Value) = "")
dann bekomme ich den Fehler:
Variante des Typs (Null) konnte nicht in Typ (OleStr) konvertiert werden.wenn dieses Feld beschrieben ist bekomme ich keinen Fehler.
das Schreiben dann in eine andere DB geht einwandfrei.
kann mir jemand sagen wie ich nun dem Programm sage das er ein leeres Feld nich auslesen soll ???
-
Das hier
if ((frmbaumschule->adobaumschule->FieldByName("Text")->Value) = Null)
ist eine Zuweisung und kein Vergleich. Die richtige Abfrage würde aber eher so aussehen
if ((frmbaumschule->adobaumschule->FieldByName("Text")->Value.IsNull())
Die Frage gehört aber eher ins BCB-Forum.
-
Also das klappt jetzt gut wenn das Feld leer ist .. nur wenn das Feld einen Eintrag hat geht es nicht mehr ....
if (frmbaumschule-> adobaumschule->FieldByName("Text")->Value.IsNull())
{
ShowMessage ("Erfolg einlesen text leer");
}
else
{
ShowMessage ("Erfolg einlesen text voll");
}
wenn das Feld nun gefüllt ist kommt wieder die Meldung das ein konvertieren nicht´möglich sei(Also statt ShowMessage kommt natürlich was anderes hin, mit ShowMessage teste ich nur ob es geht.)
-
Ohne mehr Code kann ich jetzt nichts groß dazu sagen. Bitte verwende für deinen Code die Codetags das ist sonst schwerer zu lesen.
-
Ich hoffe man kann es ein wenig verstehen.... das mit der Ordnug beim Schreiben ist nicht meine Stärke
Beim jetzigen Code kommt er wenn das Feld "Text" keinen Eintrag hat einwandfrei weiter, wenn das Feld alleridngs gefüllt ist bricht er immer vor der While Schleife ab mit "Wert (Null) kannn nicht in (String) knovertiert werden"
{ lbntimer->Enabled=false; double ID_SS; double ID_SJET; AnsiString sucheb; String suche; String text; String lname; String dname; String matchcode; double sucheid; double id; sucheb = edteingabe->Text; // auslesen des Eingabefeldes frmbaumschule ->adobaumschule->Last(); // springen in die letzte Zeile frmbaumschule-> adobaumschule->FieldByName("ID")->Value; ID_SS=frmbaumschule-> adobaumschule->FieldByName("ID")->Value; // auslesen der letzten ID um später die Schleife dort stoppen zu lassen. if (rbmatchcode->Checked) //abfrage in welche Spalte er suchen soll (es gib später weiter 5 RadioButtons nur noch nicht in diesem Code) { frmbaumschule ->adobaumschule->First(); //springen an den Anfang der Tabelle frmbaumschule-> adobaumschule->FieldByName("ID")->Value; ID_SJET=frmbaumschule-> adobaumschule->FieldByName("ID")->Value; // lesen der ersten ID für den Vergleich in der while Schleife frmbaumschule-> adobaumschule->FieldByName("Matchcode")->Value; suche=frmbaumschule-> adobaumschule->FieldByName("Matchcode")->Value; //lesen des ersten Datensatzes in der Spalte Matchcode if (sucheb != "") //prüfen ob das Eingabefeld gefüllt war { while /suche bis letzte ID erreicht (ID_SJET != ID_SS) { if (suche == sucheb) //Prüfung ob Eingabe und Spaltenfeld überien stimmt { if (frmbaumschule->adobaumschule->FieldByName("Text")->Value.IsNull()) //prüfen ob Feld "Text" leer ist { } else //wenn nicht Textfeld übernhemen { } frmbaumschule-> adobaumschule->FieldByName("LateinischerName")->Value; lname=frmbaumschule-> adobaumschule->FieldByName("LateinischerName")->Value; //lesen des Feldes Lateinischer Name frmbaumschule-> adobaumschule->FieldByName("DeutscherName")->Value; dname=frmbaumschule-> adobaumschule->FieldByName("DeutscherName")->Value; /lesen des Feldes DeutscherName frmbaumschule-> adobaumschule->FieldByName("Matchcode")->Value; //lesen des Feldes Matchcode matchcode=frmbaumschule-> adobaumschule->FieldByName("Matchcode")->Value; frmbaumschule-> adobaumschule->FieldByName("ID")->Value; id=frmbaumschule-> adobaumschule->FieldByName("ID")->Value;//lesen des Feldes ID frmbaumschule ->adodruck->Last(); //springen in die letzte Zeile der neuen Tabelle frmbaumschule ->adodruck->Insert(); // eingügen einer Zeile in neue Tabelle frmbaumschule-> adodruck->FieldByName("Text")->Value; frmbaumschule-> adodruck->FieldByName("Text")->Value = text; //schreiben des Wertes Text in neue Tabelle frmbaumschule-> adodruck->FieldByName("LateinischerName")->Value; frmbaumschule-> adodruck->FieldByName("LateinischerName")->Value = lname; //schreiben des Wertes LateinischerName in neue Tabelle frmbaumschule-> adodruck->FieldByName("DeutscherName")->Value; frmbaumschule-> adodruck->FieldByName("DeutscherName")->Value = dname; //schreiben des Wertes DeutscherName in neue Tabelle frmbaumschule-> adodruck->FieldByName("Matchcode")->Value; frmbaumschule-> adodruck->FieldByName("Matchcode")->Value = matchcode; //schreiben des Wertes Matchcode in neue Tabelle frmbaumschule-> adodruck->FieldByName("ID")->Value; frmbaumschule-> adodruck->FieldByName("ID")->Value = id; //schreiben des Wertes ID in neue Tabelle } frmbaumschule ->adobaumschule->Next(); // springen in neue Zeile um wieder in der while Schleife zu beginen mit dem suchen frmbaumschule-> adobaumschule->FieldByName("ID")->Value; ID_SJET=frmbaumschule-> adobaumschule->FieldByName("ID")->Value; //ID auslesen zum prüfen ob while Schleife wieder neu beginnt frmbaumschule-> adobaumschule->FieldByName("Matchcode")->Value; suche=frmbaumschule-> adobaumschule->FieldByName("Matchcode")->Value; //auslesen des Matchcodes zum prüfen in while Schleife } } } }