Entwickler-Ecke

Datenbanken - Query Fehler zur Laufzeit


D. Annies - Mo 08.02.10 19:43
Titel: Query Fehler zur Laufzeit
Hi, Delpher,

ich habe mal wieder eine Nuss! (Die anderen habe ich schon allein weggeräumt, aber diese ist zu schwer)

Ich will den noch in Klammern zu sehenden Code (der nämlich zweimal vorkommt) durch den Code aus SQL_Allg ersetzen. Leider bekomme ich zur Laufzeit die Fehlermeldung:

Typ für Feld F:\sch.dbf ist unbekannt

Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
procedure TForm4.SQL_Allg(tbl: TTable);
begin
  InputString := format('select * from %s where NAME LIKE ''F%%'' ', [tbl.tablename]);
  if InputQuery('SQL-Eingabedialog''Eingabe:', InputString) then   // ClickedOK
  begin
    showmessage(inputstring);
    if tbl.FieldCount > 0 then
    begin
      with qy1 do
      begin
        close;
          SQL.Text := InputString;
        open;
      end;
      showmessage('hi');
      tbl.DataSource.DataSet := qy1;
    end
    else showmessage('Keine Tabelle geladen!');
  end
  else
end;

procedure TForm4.SQLeingeben1Click(Sender: TObject);
begin
  SQL_Allg(TTable(TDBGrid(TPopupMenu(TMenuItem(sender).GetParentComponent).popupComponent).datasource.DataSet));

  { InputString := format('select * from "%s" where NAME LIKE ''F%%'' ', [table3.tablename]);
  if InputQuery('SQL-Eingabedialog', 'Eingabe:', InputString) then     // OK gedrückt
  begin
    showmessage(inputstring);
    if dbgrid4.fieldcount > 0 then
    begin
      with qy2 do
      begin           //  CREATE INDEX IDX_Ci_Co on CUSTOMER (City, Country)
        close;
          //DatabaseName := '';
          SQL.Text := InputString;
        open;
      end;
      //showmessage(query1.Fields[0].asstring);
      datasource4.DataSet := qy2;
    end
    else showmessage('Keine Tabelle geladen!');
  end }

end;


Warum das denn?
Gruß, Detlef


D. Annies - Mo 08.02.10 21:35

So, jetzt habe ich die Lösung selbst gefunden:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm4.SQL_Allg(tbl: TTable);
begin
  InputString := format('select * from "%s" where NAME LIKE ''A%%'' ', [tbl.tablename]);
  if InputQuery('SQL-Eingabedialog''Eingabe:', InputString) then   // ClickedOK
  begin
    showmessage(inputstring);
    if tbl.FieldCount > 0 then
    begin
      with qy1 do
      begin
        close;
          SQL.Text := InputString;
        open;
      end;
    end
    else showmessage('Keine Tabelle geladen!');
  end
  else
end;

procedure TForm4.SQLeingeben1Click(Sender: TObject);
begin
  SQL_Allg(TTable(TDBGrid(TPopupMenu(TMenuItem(sender).GetParentComponent).popupComponent).datasource.DataSet));
  TDBGrid(TPopupMenu(TMenuItem(sender).GetParentComponent).popupComponent).datasource.DataSet := qy1;
end;


Bis dann denn
Detlef