Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi zeilen werden ignoriert... (https://www.delphipraxis.net/18223-zeilen-werden-ignoriert.html)

Sulustaner2004 16. Mär 2004 12:58

Re: zeilen werden ignoriert...
 
ok...das was das memo angezeigt hat ist das...

SQL-Code:
Update dbo_VFL_VERZ_TEMP t
Set  Bearbeiter = :i_F0

Robert_G 16. Mär 2004 13:39

Re: zeilen werden ignoriert...
 
Vielleicht musst du die Transaktion abschließen.
Delphi-Quellcode:
ADOQuery1.Connection.CommitTrans;
p.s.: Findest du es richtig, das Feld TB_Bearbeiter auch zu ändern?
Außerdem wird nur ein Update auf bestehende Einträge ausgeführt. Es werden keine neuen hinzugefügt.

Sulustaner2004 16. Mär 2004 13:41

Re: zeilen werden ignoriert...
 
ja, das feld bearbeiter soll auch geändert werden...
weil es eben immer sein kann das ein neuer bearbeiter hinzukommt...und der sollte dann unten angefügt werden !!!!

Sulustaner2004 16. Mär 2004 13:59

Re: zeilen werden ignoriert...
 
so...mit dem abschlißen der query klappt das nicht !!!
dann bekomme ich ne fehlermeldung !!!

Robert_G 16. Mär 2004 14:27

Re: zeilen werden ignoriert...
 
Wenn auch noch Werte eingefügt werden sollen falls es zu dem Bearbeiter keine Einträge gibt dann probiere das mal.
Da ich hier weder deine Datenbank habe noch den DB-Server zum Testen missbrauchen möchte ( :wink: ) kann ich dir nicht versichern, dass es einwandfrei läuft.
Ich habe eine Menge kommentiert und keine neuen Variablen hinzugefügt, deshalb müsstest du den Code für dich anpassen können.
Ganz wichtig:
Du musst Bearbeiter aus CompNames & FieldNames entfernen!!!
Delphi-Quellcode:
Var
  SetStr                               : String;
  ProcessedRecs, i, SetCount           : Integer;
  SetVals                              : Array Of String;
Begin

  If (tb_Bearbeiter.Text = '') Then
    ShowMessage('Bitte was eintragen.');

  SetCount := 0;
  // Arraylänge auf Anzahl der TEdits
  SetLength(SetVals, CompNames.Count);
  With ADOQuery1 Do
  Begin
    // Gibt es Einträge zu diesem Bearbeiter?
    SQL.Text :=
      'SELECT Count(*) t' + #10 +
      'FROM  dbo_VFL_VERZ_TEMP t' + #10 +
      'WHERE t.Bearbeiter = :i_Bearbeiter';
    Prepared := True;
    Parameters.ParamByName('i_Bearbeiter').Value := TB_Bearbeiter.Text;

    // Ausführen
    Open;
    If Eof Or (Fields[0].AsInteger = 0) Then
      ProcessedRecs := 0
    Else
      ProcessedRecs := Fields[0].AsInteger;
    SetStr := '';
    For i := 0 To pred(CompNames.Count) Do
    Begin
      With FindComponent(CompNames[i]) As TEdit Do
        If Text <> '' Then
        Begin
          // Wenn Edit <> '' -> Wert in den Array & Spalte kommt mit in die SET-Clause...
          SetVals[SetCount] := Text;
          // Einträge > 0 UPDATE sonst INSERT
          If ProcessedRecs > 0 Then
            SetStr := SetStr + ',' + #10 + '      ' + Fieldnames[i] + ' = :i_F' + IntToStr(SetCount)
          Else
            SetStr := SetStr + ',' + #10 + '      ' + Fieldnames[i];

          inc(SetCount);
        End;
    End;

    // Wenn ein INSERT benötigt wird, dann muss hier noch die Liste mit Parametern stehen
    If ProcessedRecs > 0 Then
    Begin
      // Bearbeiter muss auf jeden Fall eingefügt werden
      SetStr :=
        'INSERT INTO dbo_VFL_VERZ_TEMP t' + #10 +
        '      (Bearbeiter ' + SetStr + ')' + #10 +
        'VALUES ( :i_Bearbeiter' + #10;
      // Fülle die Value liste mit Parametern (für jeden geänderten Wert
      For i := 0 To pred(SetCount) Do
        SetStr := SetStr + ',' + #10 + ':i_F' + IntToStr(i);

      SetStr := SetStr + ')'

      // Das INSERT-Statement sollte dann so aussehen...
      //INSERT INTO dbo_VFL_VERZ_TEMP t
      //       (Bearbeiter
      //       ,Feld1
      //       ,Feld2
      //       ...)
      //VALUES ( :i_Bearbeiter,
      //        ,:i_F1
      //       ,:i_F2
      //        ... )

    End
    Else
      SetStr :=
        'UPDATE dbo_VFL_VERZ_TEMP t' + #10 +
        'SET   ' + Copy(SetStr, 10, Length(SetStr)) + #10 +
        'WHERE t.Bearbeiter = :i_Bearbeiter';

    // Das UPDATE-Statement sollte dann so aussehen...
    //UPDATE dbo_VFL_VERZ_TEMP t
    //SET   Feld1 = :i_F1
    //      ,Feld2 = :i_F2
    //       ...
    //WHERE t.Bearbeiter = :i_Bearbeiter

    // Wenn SetCount > 0 -> Führe Abfrage aus...
    If Setcount > 0 Then
    Begin
      SQL.Text := SetStr;
      Prepared := True;
      Parameters.ParamByName('i_Bearbeiter').Value := TB_Bearbeiter.Text;
      // Werte der Paramter :i_F(1 - ...)
      For i := 0 To pred(SetCount) Do
        Parameters.ParamByName('i_F' + IntToStr(i)).Value := SetVals[i];
      // Ausführen
      ExecSQL;
    End;
  End;
  label27.Caption := tb_Bearbeiter.Text;
  //....
  tb_land.Clear;

End;
Teste den Code noch ein paar mal mit dem Memo und auskommentiertem ExecSQL. Und poste den generierten Code (diesmal mehr als ein Edit beschreiben).

Sulustaner2004 16. Mär 2004 14:40

Re: zeilen werden ignoriert...
 
ok..danke dir erstmal...das werde ich morgen machen...bin ja kurz vor feierabend !!! :-)
hast mir auf jedenfall sehr sehr geholfen !!!!

Robert_G 16. Mär 2004 14:44

Re: zeilen werden ignoriert...
 
Feierabend bei Tageslicht :?: :evil:
Was bist denn du für ein Programmierer? :stupid:

Sulustaner2004 16. Mär 2004 14:46

Re: zeilen werden ignoriert...
 
bin einer der im praktikum ist !!! :-) aber hast ja recht...ich mache zuhause noch weiter... :-)
und außerdem einer der beim öffentlichen dienst arbeitet !!! :lol:

Sulustaner2004 17. Mär 2004 07:33

Re: zeilen werden ignoriert...
 
guten morgen....
habe eben deinen text getestet.....
aber um etwas zu posten (von einer fehlermeldung mal abgesehen) bin ich nicht gekommen...er sagt irgendetwas von einem fehlen operator um abfrage ausdruck

Delphi-Quellcode:

With ADOQuery1 Do
  Begin
    // Gibt es Einträge zu diesem Bearbeiter?
    SQL.Text :=
      'SELECT Count(*) t' + #10 + //diese zeile bekomme ich als fehlermeldung zurück
      'FROM  dbo_VFL_VERZ_TEMP t' + #10 +
      'WHERE t.Bearbeiter = :i_Bearbeiter';
    Prepared := True;
    Parameters.ParamByName('i_Bearbeiter').Value := TB_Bearbeiter.Text;
habe gesucht aber keinen fehlenden operator gefunden...
außerdem durchläuft er die sql anweisung nicht einmal...
er geht zu sql.text und springt dann sofort zu prepared := true;

Robert_G 17. Mär 2004 07:55

Re: zeilen werden ignoriert...
 
"SQL.Text" bis zum ";" ist doch auch nur eine Code-Zeile.
Hast du ExecSQL auskommentiert und "Memo1.Text := ADOQuery1.SQL.Text" reingetippt?
Es wäre mööglich, das ich etwas vergessen habe und im SQL-Statement ein Komma zuviel/zuwenig auftacht.
Poste mal den generierten Code.
Oder bockt er schon bei der Count(*)-Abfrage?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:37 Uhr.
Seite 3 von 4     123 4      

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