Delphi-PRAXiS
Seite 2 von 4     12 34      

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)

Jens Schumann 16. Mär 2004 11:54

Re: zeilen werden ignoriert...
 
Zitat:

Zitat von Sulustaner2004
ok...alles schön und gut...aberwenn ich das mache bekomm ich eine fehlermeldung !!! und zwar diese...
[i]Im Projekt daten.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00404117C in Modul 'Daten.exe' Schreiben von Adresse 00000000'.
prozess angehalten.

Wenn Du was machst?
Wenn SetStr einen Wert enthält wird der Code ja auch ausgeführt. Jetzt kannst Du über einen Breakpoint und schrittweise ausführen des Programms herausbekommen an welcher Stelle die SV
auftritt. Ich vermute mal an dieser Stelle
Delphi-Quellcode:
      For i := 0 To pred(SetCount) Do
        Parameters.ParamByName('i_F' + IntToStr(i)).Value := SetVals[i]
Der SQL Ausdruck enthält keinen Parameter, der mit i_F beginnt.

Robert_G 16. Mär 2004 11:59

Re: zeilen werden ignoriert...
 
Du hast mal wieder was kopiert, ohne dir den Rest anzuschauen...

@Jens Ich glaube es knallt bei "...Value := SetVals[i];"
dort wird auf einen Eintrag im Array zugegriffen, den es noch nicht gibt!

Das muss passieren bevor du weiter machst (Sonst gibt's eine ziemlich schräges UPDATE-Statement :mrgreen: ).

Delphi-Quellcode:
  SetCount := 0;
  // Arraylänge auf ANzahl der TEdits
  SetLength(SetVals, CompNames.Count);

  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;
        SetStr := SetStr + ',' + #10 + '      ' + Fieldnames[i] + ' = :' + 'i_F' + IntToStr(SetCount);
        inc(SetCount);
      End;
  End;
  // Entferne erstes Komma & Leerzeichen
  SetStr := Copy(SetStr, 10, Length(SetStr));

Sulustaner2004 16. Mär 2004 11:59

Re: zeilen werden ignoriert...
 
nein...er springt an dieser stelle mit der meldung raus...
Delphi-Quellcode:
...
  SetStr := SetStr + ',' + #10 + '      ' + Fieldnames[i] + ' = :' + 'i_F' + IntToStr(SetCount);
...

Robert_G 16. Mär 2004 12:03

Re: zeilen werden ignoriert...
 
Dann hast du nicht zu jedem Eintrag in CompNames einen zu Fieldnames hinzugefügt...

Sulustaner2004 16. Mär 2004 12:09

Re: zeilen werden ignoriert...
 
wie meinst du das ???
du meinst jedes feld eingetragen unter comp und fieldnames ??? das habe ich getan !!!!

Robert_G 16. Mär 2004 12:12

Re: zeilen werden ignoriert...
 
Ich meinte, dass du zu jeder Zeile von CompNames auch eine in FieldNames brauchst.
Dadurch kennt die Schleife die passende Spalte zu jedem Edit.

Ich habe mir gerade deine UNIT gesaugt -> Du legst vor der Schleife die Länge des Arrays nicht fest -> Es knallt also eine Zeile früher.
SetCount muss unbedingt vor der Schleife auf 0 gestzt werden genau wie Die Länge des Arrays der Anzahl von CompNames entsprechen muss.
Delphi-Quellcode:
  SetCount := 0;
  // Arraylänge auf ANzahl der TEdits
  SetLength(SetVals, CompNames.Count);
Ansonsten befindet sich SetCount hier außerhalb des Arrays.
Delphi-Quellcode:
SetVals[SetCount] := Text;

Sulustaner2004 16. Mär 2004 12:19

Re: zeilen werden ignoriert...
 
ok...soweit so gut...das klappt jetzt ja auch...aber warum speichert er es denn nicht ab ??? das versteh ich nicht !!! :wall:

Robert_G 16. Mär 2004 12:39

Re: zeilen werden ignoriert...
 
Zeige mal Das UPDATE-Statement, das von zusammengebaut & abgesetzt wird (das schaffst du am einfachsten so wie Sharky es in deinem anderen Thread beschrieben hatte)

Sulustaner2004 16. Mär 2004 12:47

Re: zeilen werden ignoriert...
 
also das ist es wenn du das meintest....

Delphi-Quellcode:

...
 With ADOQuery1 Do
    Begin
      SQL.Text :=
        'Update dbo_VFL_VERZ_TEMP t' + #10 + 
        'Set  ' + SetStr + #10 + 
        'WHERE t.Bearbeiter = :i_Versuch';
      Prepared := True;
      // Werte der Paramter :i_F(1 - ...)
      For i := 0 To pred(SetCount) Do
        Parameters.ParamByName('i_F' + IntToStr(i)).Value := SetVals[i];
        // Hier
        Parameters.ParamByName('i_Versuch').Value := TB_Bearbeiter.Text;
      // Ausführen
      ExecSQL;

...

Robert_G 16. Mär 2004 12:50

Re: zeilen werden ignoriert...
 
Zeihe ein Memo auf dein Form, kommentiere ExecSQL aus und schreibe SQL.Text in das Memo anstatt ExecSQL aufzurufen.
Delphi-Quellcode:
// Ausführen
// ExecSQL;
 Memo1.Text := Sql.Text;
Den Text kannst du dann kopieren und hier posten (mit SQL-tags bitte)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 Uhr.
Seite 2 von 4     12 34      

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