Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wert von Lookupcombobox in DB schreiben (https://www.delphipraxis.net/104036-wert-von-lookupcombobox-db-schreiben.html)

Stern 26. Nov 2007 13:40

Datenbank: InterBase • Zugriff über: BDE

Wert von Lookupcombobox in DB schreiben
 
Hallo zusammen,

ich hätte da mal eine kleine Frage bezüglich eines Wertes, den ich in eine DB schreiben möchte.
Ich habe eine Tabelle mit z.B. Kunden. Weiterhin habe ich eine Tabelle mit Artikeln. Der Primärschlüssel von Kunden ist der Fremdschlüssel bei der Tabelle Artikel, um diese Tabellen miteinander zu verknüpfen.

Nun möchte ich gerne einen neuen record in die Tabelle Artikel einfügen. Ich hätte dabei gerne die Möglichkeit aus einer ComboBox
die bestehenden Kunden auszuwählen. Ich suche also nach einer Möglichkeit, eine bestimmte Spalte einer Tabelle in der ComboBox anzeigen zu lassen. Um das ganze nicht manuell über eine For-Schleife zu machen, habe ich die DBLookupComboBox gewählt.

Ich möchte nun gerne den Primärschlüssel des ausgewählten Kunden in die entsprechende Spalte (Foreign key) des Artikels schreiben. Kann mir da jemand nen Tipp geben???

Bis jetzt habe ich es so versucht:
SQL-Code:
 qrMain.SQL.Clear;
        qrMain.SQL.Text:='INSERT INTO artikel'+
                    '(text, jahr, land, kunde)'+
                    ' VALUES '+
                    '('''+Edit1.Text+''', '''+Edit2.Text+
                    ''', '''+Edit3.Text+''', '''+DBLookupComboBox1.Text+''');';
         qrMain.ExecSQL;
Aber wenn ich das Ganze einfüge bekomm ich einen SQL-Fehler. Error Conversion from String...
freu mich, wenn da wieder jemand seine Erfahrung mit mir teilt... :mrgreen:

Liebe Grüße
Steffi

soulies 26. Nov 2007 13:46

Re: Wert von Lookupcombobox in DB schreiben
 
hoi,

ist die spalte 'jahr' bei dir wirklich als string / Varchar definiert oder als date/timestamp etc. ?

auf den ersten blick könnte ich mir vorstellen das da einfach das format nicht stimmt ....




cya

Stern 26. Nov 2007 13:52

Re: Wert von Lookupcombobox in DB schreiben
 
ja, das habe ich in diesem Fall so gemacht. Ich weiß, dass es in diesem Fall nicht viel Sinn macht, aber da ich das Programm nur zum testen verwende, dachte ich, ist das jetzt mal ok.

Muss ich denn eventuell den Wert der ComboBox irgendwie verändern?

Liebe Grüße
Steffi

soulies 26. Nov 2007 13:58

Re: Wert von Lookupcombobox in DB schreiben
 
hoi

auf den zweiten blick etwas wo ich mir net ganz sicher bin :
es geht dabei um das leerzeichen nach 'values' und vor der klammer ...

im mom bin ich mir net ganz sicher ob das net weg muss ...
ich dachte an:

Delphi-Quellcode:
 qrMain.SQL.Text:='INSERT INTO artikel(text, jahr, land, kunde) VALUES('+QuotedStr(Edit1.Text)+','+QuotedStr(Edit2.Text)+','+QuotedStr(Edit3.Text)+','+QuotedStr(DBLookupComboBox1.Text)+' ;' ;



cya

Stern 26. Nov 2007 14:08

Re: Wert von Lookupcombobox in DB schreiben
 
hmmm, ich hab das mal versucht, aber mit der quotedStr()-Methode komm ich gar nicht durch.
Wenn ich mir "DBLookupComboBox1.Text" in einem Edit ausgeben lasse, bekomme ich dort einen String-Wert zurück.
Nämlich den aktuell ausgewählten. Allerdings will ich doch nur die entsprechende ID des records... :roll:

Weisst du noch was?

Liebe Grüße
Steffi

soulies 26. Nov 2007 14:13

Re: Wert von Lookupcombobox in DB schreiben
 
hoi,

wenn ich es richtig verstehe, dann müsstest du vorher die ID bekommen ...

'select id from tabelle where inhalt='dblookupcombobox1.text' ;

die id speichern und dann dein insert-statement aufrufen und die entsprechende id übergeben ...


cya

Stern 26. Nov 2007 14:33

Re: Wert von Lookupcombobox in DB schreiben
 
Zitat:

dann müsstest du vorher die ID bekommen ...

'select id from tabelle where inhalt='dblookupcombobox1.text' ;

die id speichern und dann dein insert-statement aufrufen und die entsprechende id übergeben ...
Ok...Mal davon abgesehen, dass ich momentan nicht weiß, wie ich das machen soll :oops: :wink:
müsste doch das auch mit der LookupCombobox gehen, oder?
Link

Schaust du vll. nochmal?

Liebe Grüße
Steffi

Stern 26. Nov 2007 15:58

Re: Wert von Lookupcombobox in DB schreiben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

hab hier im Forum ein Beispiel gefunden, dass eingentlich alles wunderschön zeigt. Ich danke dem Ersteller vielmals und hoffe, dass es in ordnung geht, wenn ich es hier nochmal anhänge, da ich den entspr. Thread nich mehr finde... :roll:

Liebe Grüße
Steffi

gmc616 26. Nov 2007 17:15

Re: Wert von Lookupcombobox in DB schreiben
 
Hallo,

mit der LookUpComboBox kenne ich mich leider nicht aus.

Meine Idee:
Die ComboBox wird aus der Datenbank gefüllt, oder?
Warum lädst du die ComboBox nicht "händisch" und füllst nebenbei ein Array of Integer (nennen wirs mal ArrayBenutzerIDS) mit den Primärschlüsseln der Benutzer?

Dann brauchst du nur noch
Delphi-Quellcode:
 qrMain.SQL.Text:='INSERT INTO artikel(text, jahr, land, kunde) VALUES('+QuotedStr(Edit1.Text)+','+QuotedStr(Edit2.Text)+','+QuotedStr(Edit3.Text)+',' + inttostr( ArrayBenuzterIDs[Combobox.ItemIndex]) + ' ;' ;
ausführen.

raiguen 27. Nov 2007 10:08

Re: Wert von Lookupcombobox in DB schreiben
 
Zitat:

Zitat von Stern
...Ich möchte nun gerne den Primärschlüssel des ausgewählten Kunden in die entsprechende Spalte (Foreign key) des Artikels schreiben. Kann mir da jemand nen Tipp geben???

Jo -> DBLookupComboBox1.KeyValue ist das 'Geheimnis' :wink:
Damit erhälst du (in deinem Fall die ID=Primärschlüssel des Kunden) den entsprechenden Wert des KeyField vom ausgewählten Eintrag(ListField) der Box.
Noch ein Tipp: um die Hochkommaorgie oder QuotedString-Geschichte zu umgehen, bietet sich die sog. Parametrisierung an:
Delphi-Quellcode:
   //rMain.SQL.Clear; <--- nicht notwendig, wenn SQL.Text:= verwendet wird
   qrMain.SQL.Text:='INSERT INTO artikel '+
                    '(text, jahr, land, kunde) '+
                    ' VALUES (:TEXT, :JAHR, :LAND, :KUNDE)';

   qrMain.SQL.Params[0].Value := Edit1.Text;
   qrMain.SQL.Params[1].Value := Edit2.Text;  
   qrMain.SQL.Params[2].Value := Edit3.Text;  
   qrMain.SQL.Params[3].Value := DBLookupComboBox1.KeyValue;
{Parameter über Namen ansprechen
   qrMain.SQL.ParamByName('TEXT').Value := Edit1.Text;
   qrMain.SQL.ParamByName('JAHR').Value := Edit2.Text;  
   qrMain.SQL.ParamByName('LAND').Value := Edit3.Text;  
   qrMain.SQL.ParamByName('KUNDE').Value := DBLookupComboBox1.KeyValue;
}
   qrMain.ExecSQL;
Die Syntax bzgl der Parameter ist teilweise von der verwendeten QueryKomponente abhängig/unterschiedlich; hier mal die entsprechende Referenz/Dokumentation befragen...
andere Möglichkeit
Delphi-Quellcode:
   qrMain.SQL.Text:= Format('INSERT INTO artikel '+
                            '(text, jahr, land, kunde) '+
                            ' VALUES (%s, %s, %s, %s) ',
                            [Edit1.Text, Edit2.Text, Edit3.Text, DBLookupComboBox1.KeyValue]);


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz