Delphi-PRAXiS

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)

Sulustaner2004 17. Mär 2004 09:49


cout(*) anweisung hat fehler...
 
so...nun auf ein neues...in der hoffnung das es klappt...
sorry wegen der ganzen verwirrung...

Robert_G 17. Mär 2004 09:55

Re: cout(*) anweisung hat fehler...
 
SQL-Code:
SELECT Count(*) -- Hier hatte sich wohl ein "t" eingeschlichen
FROM  dbo_VFL_VERZ_TEMP t
WHERE t.Bearbeiter = :i_Bearbeiter
Für alle die :wiejetzt: schreien ( :mrgreen: ) - Das bezieht sich diesen thread

Sulustaner2004 17. Mär 2004 10:10

Re: cout(*) anweisung hat fehler...
 
ok...er läuft jetzt ohne fehler durch...aber in der datenbank finde ich meine einträge nicht...
er zeigt in dem memo feld ja auch nichts an....
ruhig bleiben...ist ja nur noch bis ende märz und dann bin ich fertig mit delphi :-)

er springt sogar über diese execsql bzw. memo1.text:=adoquery1.sql.text anweisung

Sulustaner2004 17. Mär 2004 15:42

Re: cout(*) anweisung hat fehler...
 
würde mich freuen wenn ihr mir noch weiter helfen könntet !!!
ist wirklich dringend !!!

Robert_G 17. Mär 2004 15:56

Re: cout(*) anweisung hat fehler...
 
Ändere die Zeile ...
Delphi-Quellcode:
    // Wenn ein INSERT benötigt wird...
    If ProcessedRecs > 0 Then
... zu ...
Delphi-Quellcode:
    // Wenn ein INSERT benötigt wird...
    If ProcessedRecs = 0 Then
Das INSERT muss ja auch ausgeführt werden, wenn keine Einträge zum Bearbeiter gefunden werden.

Sulustaner2004 18. Mär 2004 08:41

Re: cout(*) anweisung hat fehler...
 
ok...jetzt habe ich das beim insert geändert und auch beim setcount...
aber er schreibt immer noch nicht mehr als den namen des bearbeites in die datenbank !!!

Robert_G 18. Mär 2004 09:20

Re: cout(*) anweisung hat fehler...
 
Dann poste mal wieder den geneierten Code. :wink:
Ich habe das Ding nur runtergehackt und nicht getestet (deswegen auch "> 0" / "= 0" Fehler)
Ich kann also nicht vorhersagen, wie es sich bei deiner Daten- & Programmstruktur verhält.

Sulustaner2004 18. Mär 2004 09:23

Re: cout(*) anweisung hat fehler...
 
Liste der Anhänge anzeigen (Anzahl: 1)
was würde ich ohne dich nur machen... :-)
das beste ist ich hänge die datei an !!! :-)

Robert_G 18. Mär 2004 09:29

Re: cout(*) anweisung hat fehler...
 
Das bringt so nix, poste doch einfach den generierten Code! -> Du hast die DB, nicht ich...

Sulustaner2004 18. Mär 2004 09:40

Re: cout(*) anweisung hat fehler...
 
meinst du den code vom memo ??? der war...

SQL-Code:
INSERT INTO dbo_VFL_VERZ_TEMP t
       (Bearbeiter )
VALUES ( :i_Bearbeiter
)

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 21:11 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