Einzelnen Beitrag anzeigen

Sulustaner2004

Registriert seit: 14. Jan 2004
106 Beiträge
 
Delphi 7 Professional
 
#23

Re: fehlermeldung in der query...

  Alt 23. Feb 2004, 08:32
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...
Und das leben geht weiter.....
  Mit Zitat antworten Zitat