...
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.