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


Anmelden zum Antworten