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
    
    			}
    		}
    	}
    }
    

Log in to reply