![]() |
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 |
Re: zeilen werden ignoriert...
Vielleicht musst du die Transaktion abschließen.
Delphi-Quellcode:
p.s.: Findest du es richtig, das Feld TB_Bearbeiter auch zu ändern?
ADOQuery1.Connection.CommitTrans;
Außerdem wird nur ein Update auf bestehende Einträge ausgeführt. Es werden keine neuen hinzugefügt. |
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 !!!! |
Re: zeilen werden ignoriert...
so...mit dem abschlißen der query klappt das nicht !!!
dann bekomme ich ne fehlermeldung !!! |
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:
Teste den Code noch ein paar mal mit dem Memo und auskommentiertem ExecSQL. Und poste den generierten Code (diesmal mehr als ein Edit beschreiben).
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; |
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 !!!! |
Re: zeilen werden ignoriert...
Feierabend bei Tageslicht :?: :evil:
Was bist denn du für ein Programmierer? :stupid: |
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: |
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:
habe gesucht aber keinen fehlenden operator gefunden...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; außerdem durchläuft er die sql anweisung nicht einmal... er geht zu sql.text und springt dann sofort zu prepared := true; |
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 07:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz