Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Mehrere Tabellen mit Delphi verbinden

  Alt 24. Mai 2005, 08:44
Zitat von MoYo:
Also ich bin grad am Insert Into bei Delphi dran. Dabei habe ich folgendes Problem

Delphi-Quellcode:
 Form1.Query1.Active := False;
   Form1.Query1.SQL.Clear;
   Form1.Query1.SQL.Text:='INSERT INTO "E:\Sporttag\MySQL\Lehrer.DB" '+
                    '( LehrerID, LEHnname, LEHvname, LEHkurz)'+
                    ' VALUES '+
                    '('+Edit1.Text+','+Edit2.Text+', '+Edit3.Text+
                    ', '+Edit4.Text+');';
   ShowMessage(Form1.Query1.Text); // Habe ich gemacht um zu sehen, was der dort reinschreibt.
   Form1.Query1.ExecSQL;
   Form1.Query1.SQL.Clear;
   Form1.Query1.SQL.Add('Select'
                + ' Lehrer."LehrerID", Lehrer."LEHnname",'
                + ' Lehrer."LEHvname", Lehrer."LEHkurz"'
                + ' From "E:\Sporttag\MySQL\Lehrer.DB" As Lehrer');
   Form1.Query1.ExecSQL;
   Form1.Query1.Active := True;
Könnt ihr mir sagen, was für einen Fehler ich dort habe ?

MFG,

MoYo
Also erstmal solltest Du die Tabelle nicht direkt ansprechen, sondern den Pfad/Alias in einem TDatabase Objekt definieren. Sonst kannst Du das Programm ja nie auf einem anderen Rechner laufen lassen.

Dann musst Du, um Strings einzufügen, diese entweder mit Hochkomma versehen oder über Parameter in das SQL einfügen:
Delphi-Quellcode:
 Form1.Query1.Active := False;
   Form1.Query1.SQL.Clear;
   Form1.Query1.SQL.Text:='INSERT INTO "E:\Sporttag\MySQL\Lehrer.DB" '+
                    '( LehrerID, LEHnname, LEHvname, LEHkurz)'+
                    ' VALUES '+
                    '('+Edit1.Text+','+QuotedStr(Edit2.Text)+', '+QuotedStr(Edit3.Text)+
                    ', '+QuotedtStr(Edit4.Text)+');';
   ShowMessage(Form1.Query1.Text); // Habe ich gemacht um zu sehen, was der dort reinschreibt.
   Form1.Query1.ExecSQL;
   Form1.Query1.SQL.Clear;
   Form1.Query1.SQL.Add('Select'
                + ' Lehrer."LehrerID", Lehrer."LEHnname",'
                + ' Lehrer."LEHvname", Lehrer."LEHkurz"'
                + ' From "E:\Sporttag\MySQL\Lehrer.DB" Lehrer'); // Hier war ein As zu viel, das macht man nur bei Feldnamen
   // ExecSQL nur dann nehmen, wenn keine Rückgabedatenmenge entsteht, z.b. bei INSERT, UPDATE, DELETE
   // Alternative zu Active := true kann auch Open verwendet werden.
   Form1.Query1.Active := True;
Alternative mit Parametern:
Delphi-Quellcode:
 Form1.Query1.Active := False;
   with Form1.Query1 do
   begin
      SQL.Clear;
      SQL.Add('INSERT INTO "E:\Sporttag\MySQL\Lehrer.DB" ');
      SQL.Add('( LehrerID, LEHnname, LEHvname, LEHkurz)');
      SQL.Add('VALUES ');
      SQL.Add(':LehrerID, LEHnname, LEHvname, LEHKurz');
      ParamByName('LehrerId').AsString := Edit1.Text;
      ParamByName('LEHnname').AsString := Edit2.Text;
      ParamByName('LEHvname').AsString := Edit3.Text;
      ParamByName('LEHKurz').AsString := Edit4.Text;
      Open;
Generell solltest Du Dir auch angewöhnen, jede Variable nach ihrer Verwendung zu benennen und nicht auf dem Standardwert zu lassen. So ist EditLehrerVorname ja sicherlich wesentlich aussagekräftiger als Edit3. Bei lebel-Objekten halte ich das noch für vertretbar, wenn nur die Caption geändert wird. Aber jedes Objekt, bei dem Du mehrere Eigenschaften änderst oder in einer Sourcecodezeile ansprichst, sollte benannt sein.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat