Einzelnen Beitrag anzeigen

TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Abfrage nach Last_Insert_ID() funkt. nicht

  Alt 11. Feb 2008, 14:42
So jetzt habe ich das ganze noch mal manuell und ohne Komponenten ausprobiert und nach wie vor immer noch der gleiche Fehler.

Delphi-Quellcode:
procedure TfrmLogEntryDlg.btnSaveClick(Sender: TObject);
var
  i : Integer;
  SQLCon : TSQLConnection;
  SQLQuery : TSQLQuery;

begin
  //init
  SQLCon := TSQLConnection.Create(Self);
  SQLCon.Connected := False;
  SQLCon.ConnectionName := 'MySQLConnection';
  SQLCon.DriverName := 'MySQL';
  SQLCon.GetDriverFunc := 'getSQLDriverMYSQL';
  SQLCon.KeepConnection := True;
  SQLCon.LibraryName := 'dbxmys30.dll';
  SQLCon.LoadParamsOnConnect := False;
  SQLCon.LoginPrompt := False;
  SQLCon.Params.Clear;
  SQLCon.Params.Add('DriverName=MySQL');
  SQLCon.Params.Add('HostName=localhost');
  SQLCon.Params.Add('Database=cbase');
  SQLCon.Params.Add('User_Name=root');
  SQLCon.Params.Add('Password=xxxx');
  SQLCon.Params.Add('BlobSize=-1');
  SQLCon.Params.Add('ErrorResourceFile=');
  SQLCon.Params.Add('LocaleCode=0000');
  SQLCon.Params.Add('Compressed=False');
  SQLCon.Params.Add('Encrypted=False');
  SQLCon.VendorLib := 'LIBMYSQL.DLL';

  //Verbindung öffnen
  SQLCon.Open;

  SQLQuery := TSQLQuery.Create(Self);
  SQLQuery.SQLConnection := frmMain.SQLCon;

  //Datensatz Speichern

  if bNewEntry then begin
    SQLQuery.SQL.Clear;
    SQLQuery.SQL.Text := 'SELECT CONNECTION_ID() FROM tb_routes LIMIT 1';
    SQLQuery.Open;
    //z.B. Connection ID = 200
    if SQLQuery.RecordCount > 0 then ShowMessage('Connection ID:'+SQLQuery.FindField('Connection_ID()').AsString);

    //Datensatz anlegen
    SQLQuery.SQL.Clear;
    SQLQuery.SQL.Text := 'INSERT INTO tb_routes (Date, CarID) VALUES (:Date, :CarID)';
    SQLQuery.ParamByName('Date').AsDate := dtpDate.Date;
    SQLQuery.ParamByName('CarID').AsInteger := Integer(cmbCar.Items.Objects[cmbCar.ItemIndex]);
    SQLQuery.ExecSQL;

    if SQLQuery.RowsAffected > 0 then begin
      SQLQuery.SQL.Clear;
      SQLQuery.SQL.Text := 'SELECT CONNECTION_ID() FROM tb_routes LIMIT 1';
      SQLquery.Open;
      //z.B. Connection ID = 205
      if SQLQuery.RecordCount > 0 then ShowMessage('Connection ID:'+SQLQuery.FindField('Connection_ID()').AsString);

      SQLQuery.SQL.Clear;
      SQLQuery.SQL.Text := 'SELECT LAST_INSERT_ID() FROM tb_routes';
      SQLQuery.Open;

      //Sollte den letzten Auto Inc Wert ausgeben, gibt aber immer '0' aus...
      if SQLQuery.RecordCount > 0 then ShowMessage(SQLQuery.FindField('Last_Insert_Id()').AsString);
    end;{if}
  end;{if}

  //deinit
  SQLCon.Close;
  SQLCon.Free;
  SQLQuery.Close;
  SQLQuery.Free;

end;
Entweder bin ich so blind und überseh die ganze Zeit etwas, oder dieser dBExpress müll ist total verbuggt.
  Mit Zitat antworten Zitat