Neuling vs. ADOQuery
-
Hi Leutz, habe mal wieder ein Problem:
Ich lese über einen Barcodeleser eine Kundennummer ein, worauf sich das "Protokollformular" mit den dementsprechenden Infos Füllen soll.
Die Kundennummer lese ich in ein TEdit ein und übergebe sie als Parameter der SQL-Anweisung.
Die SQL-Anweisung funktioniert in meiner ACCESS-DB problemlos, nur in meinem Programm tut sich nichts. Im SQL-Monitor ist ebenfalls kein SQL-Zugriff zu sehen. Verbindung zur DB mit "ADOConnection"(Funktioniert) damit Verbunden das "ADOQuery" damit Verbunden die "DataSource" und damit dann "DBEdit"-felder für die Datenausgabe. Bei der Felderauswahl der einzelnen DBEdits kann ich die Felder auswählen welche mir durch die SQL-Anweisung bereitgestellt werden.
Zur Hilfe hier mal meinenen Code und die SQL:
Einlesen des Barcodes:
void __fastcall TStammkundenprotokol::Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if (Key == VK_RETURN) //Einlesen des Barcodes { ADOQuery1->Open(); } }
Und hier nochmals in anderer Form:
object Edit1: TEdit Left = 88 Top = 528 Width = 121 Height = 21 TabOrder = 12 Text = 'Edit1' OnKeyDown = Edit1KeyDown end object DataSource1: TDataSource DataSet = ADOQuery1 Left = 288 Top = 136 end object ADOQuery1: TADOQuery Active = True Connection = ADOConnection1 CursorType = ctStatic Parameters = < item Name = 'kdnr' DataType = ftString Size = 5 Value = 'Edit1' end> Prepared = True SQL.Strings = ( 'SELECT [tbStammkunden].[Kdnr], [tbStammkunden].[Firma], [tbStamm' + 'kunden].[Komission], [tbStammkunden].[Name], [tbStammkunden].[Vo' + 'rname], [tbStammkunden].[Strasse], [tbStammkunden].[PLZ], [tbSta' + 'mmkunden].[Ort], [tbStammkunden].[Tel], [tbStammkunden].[Fax], [' + 'tbStammkunden].[Mobil], [tbStammkunden].[E-Mail], [tbStammkunden' + '].[Bemerkung], [tbkundenpcs].[pcbaunr], [tbPcbau1].[Auftragsdatu' + 'm]' 'FROM (tbStammkunden INNER JOIN tbkundenpcs ON [tbStammkunden].[K' + 'dnr]=[tbkundenpcs].[kdnr]) INNER JOIN tbPcbau1 ON [tbkundenpcs].' + '[pcbaunr]=[tbPcbau1].[pcbaunr]' 'WHERE [tbStammkunden].[kdnr] Like :kdnr;') Left = 232 Top = 472 end object ADOConnection1: TADOConnection Connected = True ConnectionString = 'Provider=MSDASQL.1;Persist Security Info=False;Data Source=Avw;I' + 'nitial Catalog=K:\Software-Engeneering\Auftragsverwaltung\main' LoginPrompt = False Left = 272 Top = 472 end end
SQL-Anweisung:
SELECT [tbStammkunden].[Kdnr], [tbStammkunden].[Firma], [tbStammkunden].[Komission], [tbStammkunden].[Name], [tbStammkunden].[Vorname], [tbStammkunden].[Strasse], [tbStammkunden].[PLZ], [tbStammkunden].[Ort], [tbStammkunden].[Tel], [tbStammkunden].[Fax], [tbStammkunden].[Mobil], [tbStammkunden].[E-Mail], [tbStammkunden].[Bemerkung], [tbkundenpcs].[pcbaunr], [tbPcbau1].[Auftragsdatum]
FROM (tbStammkunden INNER JOIN tbkundenpcs ON [tbStammkunden].[Kdnr]=[tbkundenpcs].[kdnr]) INNER JOIN tbPcbau1 ON [tbkundenpcs].[pcbaunr]=[tbPcbau1].[pcbaunr]
WHERE [tbStammkunden].[kdnr] Like :kdnr;Bin nun schon seit zwei Tagen am verzweifeln, ich danke euch schon mal für eure Hilfe. Wenn ihr noch infos benötigt einfach posten.
-
und wo übergibst du den wert aus dem TEdit an deine Querry??
-
SELECT [tbStammkunden].[Kdnr], [tbStammkunden].[Firma], [tbStammkunden].[Komission], [tbStammkunden].[Name], [tbStammkunden].[Vorname], [tbStammkunden].[Strasse], [tbStammkunden].[PLZ], [tbStammkunden].[Ort], [tbStammkunden].[Tel], [tbStammkunden].[Fax], [tbStammkunden].[Mobil], [tbStammkunden].[E-Mail], [tbStammkunden].[Bemerkung], [tbkundenpcs].[pcbaunr], [tbPcbau1].[Auftragsdatum]
FROM (tbStammkunden INNER JOIN tbkundenpcs ON [tbStammkunden].[Kdnr]=[tbkundenpcs].[kdnr])
INNER JOIN tbPcbau1 ON [tbkundenpcs].[pcbaunr]=[tbPcbau1].[pcbaunr]
WHERE [tbStammkunden].[kdnr] Like :kdnr;geht normales SQL nicht ?
select * from tbStammkunden st, tbkundenpcs tp, tbPcbau1 ta where st.pcbaunr= tp.pcbaunr and ta.pcbaunr= tp.pcbaunr and st.kdnr = :kdnr
du musst natürlich noch den Parameter :kdnr einen Typ zuweisen und den Value auch setzten.
-
oh,
ich seh gerade. M+A+T+T hat natürlich recht.Derberon schrieb:
void __fastcall TStammkundenprotokol::Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if (Key == VK_RETURN) //Einlesen des Barcodes { ADOQuery1->Open(); } }
ist ja nicht richtig.
void __fastcall TStammkundenprotokol::Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if (Key == VK_RETURN) //Einlesen des Barcodes { ADOQuery1->Close(); ADOQuery1->Parameters->Items[0]->Value=Edit1->Text; ADOQuery1->Open(); } }
wäre besser.
-
Super Leute hat geklappt. Ich dachte es würde reichen die Parameter in Der ADOQuery unter Parameter zu deklarieren. Dank euch bin ich wieder ein stückchen schlauer geworden. :p