Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi cout(*) anweisung hat fehler... (https://www.delphipraxis.net/18353-cout-%2A-anweisung-hat-fehler.html)

Robert_G 18. Mär 2004 09:42

Re: cout(*) anweisung hat fehler...
 
Nur die Edits, in denen Werte stehen werden in das Statementr geschrieben.
Außerdem, das da erzeugt einen neuen Eintrag!

Sulustaner2004 18. Mär 2004 09:46

Re: cout(*) anweisung hat fehler...
 
fakt ist aber das wenn ich einen wert in die editfelder eintrage nur das feld bearbeiter in die datenbank geschrieben wird und mehr nicht !!!!

CenBells 18. Mär 2004 10:10

Re: cout(*) anweisung hat fehler...
 
hallo,

ist das oben gepostete dein SQL-Code? Dann ist es klar, warum er nur das feld "bearbeiter" in die db schreibt. Steht ja auch nur eine spalte im Insert drin.

Gruß
Ken

Sulustaner2004 18. Mär 2004 10:14

Re: cout(*) anweisung hat fehler...
 
hi @ cenbells
das dort oben ist nicht unbedingt der sql code...
das ist das was ich in ein memo haben schreiben lassen um zu sehen was in der datenbank ankommt... die anweisung dazu sieht so aus wie sie oben in der datei angehangen ist !!!

Robert_G 18. Mär 2004 10:18

Re: cout(*) anweisung hat fehler...
 
Es wird anhand der beschriebenen Edits ein Statement erzeugt. Wenn es zu dem Bearbeiter einen Eintrag gibt, ein INSERT, sonst ein UPDATE.

Sulustaner2004 18. Mär 2004 10:24

Re: cout(*) anweisung hat fehler...
 
naja...irgendwie versteh ich schon was du meinst...aber wenn ich jetzt einen neuen bearbeiter hinzu füge dann soll er mir auch die ganzen werte zu dem bearbeiter eintragen...wenn der bearbeiter schon vorhanden ist soller ja auch eine zeile hinzugefügt werden...

Robert_G 18. Mär 2004 10:27

Re: cout(*) anweisung hat fehler...
 
:wall: Komplett aneinander vorbeigeredet!
DAnn spare die Count-Abfrage und setzte Processedrecs immer auf 0.

Sulustaner2004 18. Mär 2004 10:40

Re: cout(*) anweisung hat fehler...
 
sorry aber ich steh heute ein bischen neben mir...was meintest du jetzt ???

Delphi-Quellcode:
 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(*)' + #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 //hier gleich null lassen und was soll ich mit der count abfrage machen ???
    Begin
      // Bearbeiter muss auf jeden Fall eingefügt werden
      SetStr :=
        'INSERT INTO dbo_VFL_VERZ_TEMP ' + #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;
      //memo1.Text:=adoquery1.SQL.Text;
    End;
  End;
sollte diese If ProcessedRecs = 0 Then anweisung gleich null sein oder auf was wolltest du raus ???

Sulustaner2004 19. Mär 2004 07:16

Re: cout(*) anweisung hat fehler...
 
weil es trotzdem nicht richtig geht..er schreibt immer nur den bearbeiter und mehr nicht in die db

und ich bekomme seit eben eine meldung syntaxfehler in update anweisung..
ok...syntax fehler ist behoben...aber mehr auch nicht...er schreibt nur den bearbeiter rein....
und wenn er schon vorhanden ist dann schreibt er ihn einfach über....


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr.
Seite 2 von 2     12   

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