Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Prism Update einer Interbase Datenbank funktioniert nicht (https://www.delphipraxis.net/84153-update-einer-interbase-datenbank-funktioniert-nicht.html)

DeadMatt 12. Jan 2007 10:04

Datenbank: Interbase • Version: 7.5 • Zugriff über: ADO

Update einer Interbase Datenbank funktioniert nicht
 
Hallo,

ich habe nun schon seit knapp 2 Tagen ein Problem was ich nicht zu loesen schaffe.
Ich will aus einer simpelen Interbase Datenbank etwas aktuallisieren und es klappt nicht.
Das Select funktioniert so:
Delphi-Quellcode:
s_sql := 'SELECT ID, VORNAME, NACHNAME, KUERZEL, ADMINISTRATOR FROM MITARBEITER WHERE KUERZEL = '+''''+Environment.UserName+'''';
  cmd  := BdpCommand.Create(s_sql, DBConnection2);
  DBConnection2.Open;
      trsa := DBConnection2.BeginTransaction;
          datred := cmd.ExecuteReader;
              while datred.read do
              begin
                  lbl_id.Text      := datred['ID'].ToString;
                  lbl_vorname.Text := datred['VORNAME'].ToString;
                  lbl_nachname.Text := datred['NACHNAME'].ToString;
                  lbl_kuerzel.Text := datred['KUERZEL'].ToString;
                  lbl_admin.Text   := datred['ADMINISTRATOR'].ToString;
              end;
          datred.Close;
      trsa.Commit;
      datred.Free;
  DBConnection2.Close;
aber das UPDATEN klappt nicht...hab das so ausprobiert:
Delphi-Quellcode:
        s_sql :='UPDATE MITARBEITER SET '+
        'ID = '+txt_id.Text+', '+
        'VORNAME = '+txt_vorname.Text+', '+
        'NACHNAME = '+txt_nachname.Text+', '+
        'KUERZEL = '+txt_kuerzel.Text+', '+
        'ADMINISTRATOR = '+txt_admin.Text+' '+
        'WHERE KUERZEL = '+Environment.UserName;

      cmd  := BdpCommand.Create(s_sql, DBConnection2);
      DBConnection2.Open;
        trsa := DBConnection2.BeginTransaction;
        cmd.Transaction:=trsa;
        trsa.Commit;
      DBConnection2.Close;
      cmd.Free
Die Vars sind so deklariert:
Delphi-Quellcode:
s_sql: string;
  cmd:   BdpCommand;
  trsa:  BdpTransaction;
  datred: BdpDataReader;
ich hoffe mir kann jemand helfen!

marabu 12. Jan 2007 10:16

Re: Update einer Interbase Datenbank funktioniert nicht
 
Hallo,

greife dir den Inhalt von s_sql ab und führe das Statement mal extern aus, dann erfährst du ganz sicher woran es hapert.

Grüße vom marabu

mkinzler 12. Jan 2007 10:27

Re: Update einer Interbase Datenbank funktioniert nicht
 
Stringfelder müßen gequoted werden oder du verwendest Parameter.

Andreas Schilling 12. Jan 2007 11:06

Re: Update einer Interbase Datenbank funktioniert nicht
 
Hallo Deadmatt
Du weist zwar dem cmd die datenverbindung und Transaktion zu aber es fehlt noch das cmd.exequery (oder so ähnlich, weis nicht wie das bei .net heißt) vor dem Commit.

DeadMatt 12. Jan 2007 13:14

Re: Update einer Interbase Datenbank funktioniert nicht
 
erstmal danke fuer die Antworten :)

Ich hab nun alles nochmal geschrieben und eure Ratschlaege beruecksichtigt(Wenn ich dies nich vorher schon getestet hab ;)) und nun sieht es so aus, dass ich eine Funktion schreiben wollte womit nur ein Attribut geaendert wird.

Delphi-Quellcode:
function MemberDataUpdate(AUSWAHL: string): boolean;
var
  s_sql, Constr, ConOptions: string;
  cmd: BdpCommand;
  trsa: BdpTransaction;
  datred: BdpDataReader;
  DBCon: BdpConnection;
begin
  //Einstellungen der Datenbank sowie auch bei ConOptions
  ConStr := 'Provider=Interbase;' +
      'assembly=Borland.Data.Interbase, Version=2.5.0.0,' +
      'Culture=neutral, PublicKeyToken=91d62ebb5b0d1b1b;' +
      'vendorclient=gds32.dll;pooling=True;' +
      'grow on demand=True;database=localhost:C:\InterbaseDB\XYZ.IB;' +
      'username=sysdba;max pool size=100;password=masterkey';

  ConOptions := 'LoginPrompt=False;SQLDialect=3;RoleName=None;' +
       'CommitRetain=true;ServerCharSet=NONE;RollbackRetain=False;' +
       'TxnIsolation=ReadCommitted;WaitOnLocks=true';

  //Einstellungen in die Verbindung implementieren
  DBCon:= BdpConnection.Create(ConStr);
  DBCon.ConnectionOptions:= ConOptions;

  s_sql := 'UPDATE MITARBEITER SET VORNAME ='+AUSWAHL+' WHERE KUERZEL= '+''''+Environment.UserName+'''';
  cmd := BdpCommand.Create(s_sql, DBCon);
 
  try
    DBCon.Open;
          trsa := DBCon.BeginTransaction;
          cmd.Transaction:=trsa;
          cmd.ExecuteNonQuery; {das muesste das cmd.exequery sein^^ is zwar NON query aber nen anderes gabs nich}
          trsa.Commit;
    DBCon.Close;
    result := true;
  finally
    result := false;
  end;
end;
doch ist es egal was ich mache, ich bekomme IMMER ein false zurueck! bin verzweifelt :(

Andreas Schilling 12. Jan 2007 13:19

Re: Update einer Interbase Datenbank funktioniert nicht
 
du verwendest jetzt try - finally - end da kommst du immer ins finally und damit als Rückgabewert false. Du meinst sicher try except end

DeadMatt 12. Jan 2007 13:24

Re: Update einer Interbase Datenbank funktioniert nicht
 
args ^^ Delphi is so ungewohnt ^^'
aber naja wenn ich es auf except stelle kommt zwar nun true aber updaten tut ers trotzdem nich mmhh

MagicAndre1981 12. Jan 2007 13:27

Re: Update einer Interbase Datenbank funktioniert nicht
 
und benutze Parameter und bau den SQLString nicht so zusammen ;)

DeadMatt 12. Jan 2007 13:31

Re: Update einer Interbase Datenbank funktioniert nicht
 
Zitat:

Zitat von MagicAndre1981
und benutze Parameter und bau den SQLString nicht so zusammen ;)

*g* naja ich hab nu die lösung^^ habs aber wieder so aufgebaut :D
Delphi-Quellcode:
s_sql := 'UPDATE MITARBEITER SET VORNAME ='''+AUSWAHL+''' WHERE KUERZEL= '+''''+Environment.UserName+'''';
[/delphi]
danke an alle ;)

mkinzler 12. Jan 2007 13:39

Re: Update einer Interbase Datenbank funktioniert nicht
 
Die Lösung über Parameter wäre aber eleganter.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 Uhr.

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