Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi fehlermeldung in der query... (https://www.delphipraxis.net/16613-fehlermeldung-der-query.html)

Sulustaner2004 23. Feb 2004 07:54

Re: fehlermeldung in der query...
 
also die datei befindet sich auf seite 1 dieses beitrages...
und ist von robert_g.... :oops:

fkerber 23. Feb 2004 08:16

Re: fehlermeldung in der query...
 
Hi!

Also von hinten nach vorne :lol:

am Ende fehlt ein
Delphi-Quellcode:
end.
Was den Fehler in 275 angeht:

Delphi-Quellcode:
Begin
      'Update dbo_Versuchsflaechen_ST t' + #10 +
        'Set  ' + SetStr + #10 +
        'WHERE t.Versuchsfl_Bezeichnung = :i_Versuch';
Du hast da hinter dem Begin einfach so nen String stehen. Du musst den String schon irgendeiner Variable zuweisen. Ich kenne mich leider nicht mit ADOQuery aus, aber wie gesagt, irgendwas muss dieser String zugewiesen werden:
Delphi-Quellcode:
variable:='string';
Was den Fieldnames-Fehler angeht, habe ich leider keine Ahnung, weil ich nicht so ganz durchschaue, was da geschieht.

Bzgl. des ersten Fehlers:
Probiers mal so:

Delphi-Quellcode:
          TLabel(FindComponent('label' + IntToStr(i + 29))).Caption := FieldValues[i].Value;
Hoffe, das hilft.

Ciao fkerber

Sulustaner2004 23. Feb 2004 08:32

Re: fehlermeldung in der query...
 
also alles in allem klappt das nicht so @ fkerber
er hat irgendwelche probleme...wenn ich intostr setze stört ihn die vorschleife und danach der selbe fehler wieder...
ich poste nochmal den gesamten quellcode...

Delphi-Quellcode:

...
PRIVATE
    { Private-Deklarationen }
    FieldList, CompNames: TStringList;
  PUBLIC
    { Public-Deklarationen }
  End;

Var
  versuch                              : Tversuch;

Implementation
//uses form1;

{$R *.dfm}
// Zum füllen der combobox cbo_bezeichnung

Procedure TVersuch.FormCreate(Sender: TObject);
Begin
  FieldList := TStringList.Create;
  CompNames := TStringList.Create;
  // Für jedes Feld (FieldList) gibt es ein TEdit (CompNames)
  With adoquery1 Do
  Begin
    sql.Add('BEHANDLUNG');
    sql.Add('VERSUCHSFL_NR_WW');
    sql.Add('ANLAGEJAHR');
    sql.add('FLAECHENGROESSE');
    sql.Add('FLAECHENFORM');
    sql.Add('FOWUGEB');
    sql.Add('FOWUBEZ');
    sql.Add('MAKROKLIMA');
    sql.Add('KLIMASTUFE');
    sql.Add('BOART');
    sql.Add('LOBOFORM');
    sql.Add('HUFORM');
    sql.Add('BOTYP');
    sql.Add('NKS');
    sql.Add('HOEHE_NN');
    sql.Add('HANG_N');
    sql.Add('HANG_R');
    sql.Add('BA_M');
    sql.Add('HERKUNFT');
  End;
  With CompNames Do
  Begin
    Add('TB_BEHANDLUNG');
    Add('TB_VFL_NR_WW');
    Add('TB_JAHR');
    Add('TB_GROESSE');
    Add('TB_FORM');
    Add('TB_FOW1');
    Add('TB_FOW2');
    Add('TB_MAKRO');
    Add('TB_KLIMA');
    Add('TB_BO');
    Add('TB_LOBO');
    Add('TB_HU');
    Add('TB_BOTYP');
    Add('TB_NKS');
    Add('TB_HOEHE');
    Add('TB_HANG_N');
    Add('TB_HANG_R');
    Add('TB_BA');
    Add('TB_HERKUNFT');
  End;

  With ADOQuery1 Do
  Begin
    SQL.Text :=
      'SELECT dbo_VF.Versuchsfl_Bezeichnung' + #10 +
      'FROM  (dbo_Versuch_ST dbo_V Inner Join dbo_Versuchsflaechen_ST dbo_VF On' + #10 +
      '       dbo_V.Versuchs_ID = dbo_VF.Versuchs_ID)' + #10 +
      //'INNER JOIN Koordinaten_ST ON dbo_VF.Versuchsfl_ID = Koordinaten_ST.Versuchsfl_ID' + #10 +
//'WHERE (((dbo_VF.Versuchsfl_Bezeichnung)))' + #10 +
    'ORDER By dbo_VF.Versuchsfl_Bezeichnung;';
    Open;
    While Not Eof Do
    Begin
      cbo_bezeichnung.Items.Add(FieldByName('Versuchsfl_Bezeichnung').asString);
      Next;
    End;
  End;
End;
//zum füllen der labels

Procedure TVersuch.CBO_BezeichnungChange(Sender: TObject);
Var
  Versuch                              : String;
  i                                    : String;
Begin
  If cbo_bezeichnung.Text <> '' Then
  Begin
    versuch := cbo_bezeichnung.Text;
    label30.Caption := '';
    label31.Caption := '';

    With ADOQuery1 Do
    Begin
      SQL.Text :=
        'SELECT dbo_VF.Versuchsfl_ID,' + #10 +
        '      dbo_VF.Versuchsfl_Bezeichnung,' + #10 +
        '      dbo_VF.Versuchs_ID,' + #10 +
        '      dbo_VF.Behandlung,' + #10 +
        '      dbo_VF.Versuchsfl_nr_WW,' + #10 +
        '      dbo_VF.Versuchsfl_nr_Hass,' + #10 +
        '      dbo_VF.AnlageJahr,' + #10 +
        '      dbo_VF.Flaechengroesse,' + #10 +
        '      dbo_VF.Flaechenform,' + #10 +
        '      dbo_VF.FOWUGEB,' + #10 +
        '      dbo_VF.FOWUBEZ,' + #10 +
        '      dbo_VF.MAKROKLIMA,' + #10 +
        '      dbo_VF.KLIMASTUFE,' + #10 +
        '      dbo_VF.BOART,' + #10 +
        '      dbo_VF.LOBOFORM,' + #10 +
        '      dbo_VF.HUFORM,' + #10 +
        '      dbo_VF.BOTYP,' + #10 +
        '      dbo_VF.NKS,' + #10 +
        '      dbo_VF.Hoehe_NN,' + #10 +
        '      dbo_VF.HANG_N,' + #10 +
        '      dbo_VF.HANG_R,' + #10 +
        '      dbo_VF.BA_M,' + #10 +
        '      dbo_VF.Herkunft' + #10 +
        'FROM  dbo_Versuchsflaechen_ST dbo_VF' + #10 +
        'WHERE dbo_VF.Versuchsfl_Bezeichnung = :i_Versuch' + #10 +
        'ORDER By dbo_VF.Versuchsfl_Bezeichnung';
      Prepared := True;
      Parameters.ParamByName('i_Versuch').Value := CBO_Bezeichnung.Text;
      Open;
      // Ab der 3. Spalte beginnen die Werte, die in den Labels dargestellt werden sollen...
      If Not Eof Then
        For i := 2 To pred(FieldCount) Do
        Begin
          TLabel(FindComponent('label' + IntToStr((i + 29)))).Caption := FieldValues[i].Value;
        End;

    End;
  End;
End;

Procedure TVersuch.cb_ExitClick(Sender: TObject);
Begin
  Close;
End;

Procedure TVersuch.CB_TakeClick(Sender: TObject);
Var
  versflid, SetStr                     : String;
  ProcessedRecs, i, SetCount           : Integer;
  SetVals                              : Array Of String;
Begin
  versflid := ADOQuery1.FieldByName('versuchs_id').asString;
  If (tb_versuch_id.Text = '') Then
    ShowMessage('Bitte was eintragen.');

  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));
  // Wenn SetStr beschrieben wurde -> baue UPDATE-Statement...
  If SetStr <> '' Then
  Begin
    With ADOQuery1 Do
    Begin
      'Update dbo_Versuchsflaechen_ST t' + #10 +
        'Set  ' + SetStr + #10 +
        'WHERE t.Versuchsfl_Bezeichnung = :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];
      // Ausführen
      ExecSQL;
    End;
  End;

End;

end.
bin langsam wirklich am verzweifeln... :wall:

fkerber 23. Feb 2004 08:35

Re: fehlermeldung in der query...
 
Hi!

So wie ich das sehe sind die Fehler immer noch drin.
Die Sache mit dem String bei der ADO-Query z.B.
Und was das mit dem InttoStr beim FindComponent angeht, dann schau mal in der Hilfe nach.

Du musst zumindest versuchen meine Lösungsansätze nachzuvollziehen und nicht nur sagen, es geht nicht.

Ciao fkerber

Robert_G 23. Feb 2004 08:37

Re: fehlermeldung in der query...
 
:wall: wie gesagt, ich hatte das Ding auf die Schnelle runtergehackt.

Natürlich ist das 'UPDATE... reinster Schwachfug... :oops:
Es sollte so aussehen:
Delphi-Quellcode:
  Begin
    With ADOQuery1 Do
    Begin
      SQL.Text :=
        'Update dbo_Versuchsflaechen_ST t' + #10 +
          'Set  ' + SetStr + #10 +
          'WHERE t.Versuchsfl_Bezeichnung = :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];
      // Ausführen
      ExecSQL;
    End;

Sulustaner2004 23. Feb 2004 08:43

Re: fehlermeldung in der query...
 
danke dir...
das habe ich inzwischen auch gesehen gehabt !! :-)
aber trotzdem habe ich noch andere fehler die ich nicht sehe...einmal der
Delphi-Quellcode:
 For i := 2 To pred(FieldCount) Do
mit der fehlermeldung
[Fehler] versuch2.pas(227): FOR-Schleifenvariable muss von ordinalem Typ sein

der
Delphi-Quellcode:
TLabel(FindComponent('label' + IntToStr((i + 29)))).Caption := FieldValues[i].Value;
mit der fehlermeldung
[Fehler] versuch2.pas(229): Inkompatible Typen: 'String' und 'Integer'

und der
Delphi-Quellcode:
SetStr := SetStr + ',' + #10 + '      ' + FieldNames[i] + ' = :' + 'i_F' + IntToStr(SetCount);
mit der fehlermeldung
[Fehler] versuch2.pas(262): Undefinierter Bezeichner: 'FieldNames'

Robert_G 23. Feb 2004 08:49

Re: fehlermeldung in der query...
 
Liste der Anhänge anzeigen (Anzahl: 1)
"i" ist in dem von mir geposteten Code Integer.
Und nimm anstatt FieldNames die StringList FieldList, die unter private deklariert wurde...
Nachtrag:

Du solltest am Besten einfach meinen Code nehmen und den Bug bei 'UPDATE... beheben.
Du hast nämlich noch eine Menge mehr Fehler eingebaut...

[edit=Sharky]Doppelpostin auf wunsch gelöscht. Mfg, Sharky[/edit]

Sulustaner2004 23. Feb 2004 08:56

Re: fehlermeldung in der query...
 
ok...soweit geht es...nur mir der zeile
Delphi-Quellcode:
TLabel(FindComponent('label' + strtoint((i + 29)))).Caption := FieldValues[i].Value;
hat er noch seine probleme...
er sagt dann immer
[Fehler] versuch2.pas(229): Inkompatible Typen: 'String' und 'Integer'

und
Delphi-Quellcode:
 With adoquery1 Do
  Begin
    Add('BEHANDLUNG');
    Add('VERSUCHSFL_NR_WW');
    Add('ANLAGEJAHR');
    Add('FLAECHENGROESSE');
    Add('FLAECHENFORM');
    Add('FOWUGEB');
    Add('FOWUBEZ');
    Add('MAKROKLIMA');
    Add('KLIMASTUFE');
    Add('BOART');
    Add('LOBOFORM');
    Add('HUFORM');
    Add('BOTYP');
    Add('NKS');
    Add('HOEHE_NN');
    Add('HANG_N');
    Add('HANG_R');
    Add('BA_M');
    Add('HERKUNFT');
  End;
  With CompNames Do
  Begin
    Add('TB_BEHANDLUNG');
    Add('TB_VFL_NR_WW');
    Add('TB_JAHR');
    Add('TB_GROESSE');
    Add('TB_FORM');
    Add('TB_FOW1');
    Add('TB_FOW2');
    Add('TB_MAKRO');
    Add('TB_KLIMA');
    Add('TB_BO');
    Add('TB_LOBO');
    Add('TB_HU');
    Add('TB_BOTYP');
    Add('TB_NKS');
    Add('TB_HOEHE');
    Add('TB_HANG_N');
    Add('TB_HANG_R');
    Add('TB_BA');
    Add('TB_HERKUNFT');
  End;
dort sagt er
[Fehler] versuch2.pas(120): Undefinierter Bezeichner: 'Add'

also entweder ich bin zu bl.. oder einfach noch nicht wach...

Robert_G 23. Feb 2004 08:58

Re: fehlermeldung in der query...
 
Ist I immer noch String?

Sulustaner2004 23. Feb 2004 09:02

Re: fehlermeldung in der query...
 
ja...i ist für ihn immer noch string !!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr.
Seite 3 von 5     123 45      

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