![]() |
Datenbank: Access • Version: 2003 • Zugriff über: Firedac
Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen
Hallo,
ich muss auch mal wieder was programmieren ;-) und versuche mich ein wenig an Datenbanken. Ich möchte über Firedac eine accessdb erstellen und möchte dort später diverse aus xml importierte Daten ablegen. Diese liegen aktuell in Clientdatasets. Kleines Demo, prinzipiell geht das:
Delphi-Quellcode:
Problem: nach table.open sind alle string-Felder vom Typ ftwidememo und von der Länge offen. Damit kann ich in access keine Beziehungen setzen.
procedure TForm2.Button3Click(Sender: TObject);
const const_DBDateiname='D:\TestDB\Test2.mdb'; procedure proc_debugType(const Caption:string;const fieldno:integer); Var s:string; begin s:=GetEnumname( TypeInfo(TFieldType), Ord(FDTable1.FieldDefs[fieldno].DataType)); Memo1.Lines.add(Caption+'-'+FDTable1.Name+': Fieldtype:'+s+' Size:'+FDTable1.FieldDefs[fieldno].size.ToString); end; procedure Proc_debug(const Caption:string); begin proc_debugType(Caption,0); proc_debugType(Caption,1); proc_debugType(Caption,2); proc_debugType(Caption,3); end; begin if FileExists(const_DBDateiname) then deletefile(const_DBDateiname); FDMSAccessService1.Database :=const_DBDateiname; FDMSAccessService1.CreateDB; FDConnection1.ConnectionName:='test2'; FDConnection1.DriverName:='MSAcc'; FDConnection1.Params.clear; FDConnection1.Params.Add('DriverID=MSAcc'); FDConnection1.Params.Add('Database='+const_DBDateiname); FDTable1.TableName:='Testname'; // FDTable1.FieldDefs.Assign(ClientDataSet1.FieldDefs); //egal ob so oder direkt wie folgend: FDTable1.FieldDefs.Add('Test_ftInteger',ftInteger,0); FDTable1.FieldDefs.Add('Test_ftString', ftString,25); FDTable1.FieldDefs.Add('Test_ftWideString', ftWideString,25); FDTable1.FieldDefs.Add('Test_ftMemo', ftMemo,0); FDTable1.CreateTable(false); FDConnection1.Open; Proc_debug('vor table open'); FDTable1.Open; Proc_debug('nach table open'); end;
Code:
Wenn ich in access eine DB erstelle und die mit dem Prog öffne, sind die Feldtypen und Längen richtig.
vor table open-FDTable1: Fieldtype:ftInteger Size:0
vor table open-FDTable1: Fieldtype:ftString Size:25 vor table open-FDTable1: Fieldtype:ftWideString Size:25 vor table open-FDTable1: Fieldtype:ftMemo Size:0 nach table open-FDTable1: Fieldtype:ftInteger Size:0 nach table open-FDTable1: Fieldtype:ftWideMemo Size:0 nach table open-FDTable1: Fieldtype:ftWideMemo Size:0 nach table open-FDTable1: Fieldtype:ftWideMemo Size:0 Was mache ich falsch :wall:, bzw was muss ich mir nochmal genauer anschauen? Danke und Gruß Frank |
AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen
Der Code sieht nicht schlecht aus. :)
Wenn Du das nur zum Spaß musst, "reicht" vielleicht ein Table Create Statement per ExecSQL? Und wenn es wirklich Spaß machen soll, warum Access? Access ist ungefähr die unkonventionellste "Datenbank", die ich kenne. |
AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen
Zitat:
Zitat:
ExecSQL scheitert am erstmal am Hintergrundwissen, muss ich mich belesen. Access: hätte für mich den Vorteil, dass die Daten auch für andere einfacher auswertbar sind und ich weiß, dass Access auf den Zielrechnern auch drauf ist, wenn aus dem Spaß Ernst wird ;-). Was würdest du empfehlen? Mit Firedac habe ich es hier auch beim Wechsel immer recht einfach, oder? Es geht eigentlich nur um Auswertungen, die Tabellenstruktur ist aber schon recht komplex. Außer beim Erstellen wird nix mehr geschrieben. |
AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen
Delphi-Quellcode:
Danke, war einfach ;-).
FDConnection1.ExecSQL('create table Testname (id integer, name1 varchar(10), name2 varchar(25),name3 varchar(40))');
interessanterweise wird die Tabelle in Access so mit der richtige Feldgröße angelegt. aber warum geht's nicht direkt über FDTable? |
AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen
Zitat:
Ich bin nicht mehr aktiv in der Delphientwicklung, es gibt hier sicher einige Leute, die das kompetent beantworten können. |
AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen
Zitat:
Accessvorteil "Verfügbarkeit" klingt nach professioneller Bürotätigkeit. Anscheinend ist MS Office immer noch der Quasi Standard im Büro. Verfügbarkeit eines DB Systems wäre auch durch einige andere, sogar kostenlose Systeme gegeben. - Früher MSDE heute glaub ich SQL Server Express (oder das analoge Produkt von Oracle, Oracle Express) - Firebird Embedded kannst Du direkt in Dein Programm integrieren - Postgres arbeitet schon serverseitig ganz gut mit XML (dazu gibt's nebenan eine Diskussion über JSON Analyse per SQL: ![]() - Vielleicht auch SQLite P.S.: Die Systeme haben natürlich alle unterschiedliche Fußabrücke, auch wenn sie erstmal verfügbar sind. Hervorzuheben ist da Firebird und SQLite. |
AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen
Zitat:
Meine Empfehlung für QuicknDirty-DBMS ist Firebird auch wenn der SQL-Dialekt stellenweise etwas gewöhnungsbedürftig ist. Was aber nichts negatives über die genannten Expressversionen oder andere DBMS sagen soll. Für mein Privatvergnügen sind mir Lizenzfragen relativ egal wer aber Freunde und Bekannte oder sogar Kunden mit einer DB beglücken will, sollte da schon sorgfälig auswählen. Gruß K-H |
AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen
:thumb: danke, hilft mir erstmal weiter. ich werde mich den genannten intensiver auseindersetzen
|
AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen
Zitat:
|
AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen
variable Länge mit den Größen, wie übergeben :-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz