Autor Beitrag
Arne Danikowski
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Mi 05.03.08 14:51 
Hallo, ich habe hier ein kleines Programm, das soll eine dbase Datenbank in eine vorhandenen Accessdatenbank kopieren
Doch immer wenn ich die SQL Anweisung starte kommt immer die Meldung, dass er dei Datei nicht finden kann, obwohl diese da ist.
Er möchte auch immer eine Datenbnak im Format *.db haben (Paradox) ich möchte allerdings DBase also *.dbf Dateien verwenden.

Wo liegt mein Denkfehler?

hier der Programmcode
ausblenden volle Höhe 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:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Table1.DatabaseName := (dbverzeichnis);
  Session.GetTableNames(Table1.DatabaseName, '*.dbf', False, False, ComboBox1.Items);
  ADOConnection1.ConnectionString :=
    'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=lexicon.mdb;Persist Security Info=False'
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; s: string;

  function getAccessType(fd: TFieldDef): string;
  var ft: TFieldType;
  begin
    ft := fd.DataType;
    case ft of
      ftAutoInc: Result := 'COUNTER';
      ftString: Result := 'TEXT(' + IntToStr(fd.Size) + ')';
      ftSmallint: Result := 'SMALLINT';
      ftInteger: Result := 'INTEGER';
      ftWord: Result := 'WORD';
      ftBoolean: Result := 'YESNO';
      ftFloat: Result := 'FLOAT';
      ftCurrency: Result := 'CURRENCY';
      ftDate, ftTime, ftDateTime: Result := 'DATETIME';
      ftBlob, ftGraphic: Result := 'LONGBINARY';
      ftMemo, ftFmtMemo: Result := 'MEMO'
    else
      Result := 'MEMO'
    end
  end;
begin
  Table1.TableName := ComboBox1.Text;
  label2.Caption:=Table1.TableName;
  Table1.FieldDefs.Update;
  s := 'CREATE TABLE ' + Table1.TableName + ' (';
  with Table1.FieldDefs do begin
    for i := 0 to Count - 1 do begin
      s := s + ' ' + Items[i].Name; s := s + ' ' + getAccessType(Items[i]);
      s := s + ','
    end;
    s[Length(s)] := ')'
  end;
  Memo1.Clear; Memo1.Lines.Add(s)
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  try
    ADOCommand1.CommandText := 'DROP TABLE ' + ComboBox1.Text;
    ADOCommand1.Execute
  except
  end;
  ADOCommand1.CommandText := Memo1.Text;
  ADOCommand1.Execute
end;

procedure TForm1.Button3Click(Sender: TObject);
var i: Integer;
begin
  Table1.Open;
  ADOTable1.TableName := ComboBox1.Text;
  ADOTable1.Open;
  try
    while not Table1.EOF do begin
      ADOTable1.Insert;
      for i := 0 to Table1.Fields.Count - 1 do
        if not (Table1.FieldDefs.Items[i].DataType = ftAutoInc) then
          ADOTable1.FieldByName(Table1.FieldDefs[i].Name).Value := Table1.Fields[i].Value;
      ADOTable1.Post;
      Table1.Next
    end;
  finally
    Table1.Close; ADOTable1.Close
  end
end;

procedure TForm1.DirectoryEdit1Change(Sender: TObject);
begin
  dbverzeichnis := directoryedit1.Text;
end;

end.
Arne Danikowski Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Do 06.03.08 17:31 
Ich konnte das Problem selber lösen.

Die Komponente BDE TTable habe ich gegen TApolloTable getauscht damit funktionieren auch foxpro tabellen.
Es sollte aber auch mit einer Standard TTable gehen. (nicht mehr getestet)

Dieser Eintrag brachte den Erfolg.



ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  combobox1.Text := (combobox1.Text + '.dbf')   //erhält zusätzlich die Endung dbf
end;