AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen
Thema durchsuchen
Ansicht
Themen-Optionen

Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen

Ein Thema von Keldorn · begonnen am 23. Feb 2020 · letzter Beitrag vom 23. Feb 2020
Antwort Antwort
Seite 1 von 2  1 2      
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen

  Alt 23. Feb 2020, 07:59
Datenbank: Access • Version: 2003 • Zugriff über: Firedac
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:
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;
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.
Code:
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
Wenn ich in access eine DB erstelle und die mit dem Prog öffne, sind die Feldtypen und Längen richtig.

Was mache ich falsch , bzw was muss ich mir nochmal genauer anschauen?

Danke und Gruß Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen

  Alt 23. Feb 2020, 08:38
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen

  Alt 23. Feb 2020, 08:57
Der Code sieht nicht schlecht aus.
danke, immerhin

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.
Grundlage sind (sehr viele) XML die in clientdatasets gespeichert werden. FDTable1.FieldDefs.Assign(ClientDataSet1.FieldDefs ) und copydataset würden mich hier schon recht einfach weiterbringen.
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.

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen

  Alt 23. Feb 2020, 09:26
  FDConnection1.ExecSQL('create table Testname (id integer, name1 varchar(10), name2 varchar(25),name3 varchar(40))'); Danke, war einfach .
interessanterweise wird die Tabelle in Access so mit der richtige Feldgröße angelegt.

aber warum geht's nicht direkt über FDTable?

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen

  Alt 23. Feb 2020, 10:22
  FDConnection1.ExecSQL('create table Testname (id integer, name1 varchar(10), name2 varchar(25),name3 varchar(40))'); Danke, war einfach .
interessanterweise wird die Tabelle in Access so mit der richtige Feldgröße angelegt.

aber warum geht's nicht direkt über FDTable?
Weil Access none standard ist? Weil Dein Delphi und Dein Access zu alt sind? Schlechte Treiber? Alles nur geraten.
Ich bin nicht mehr aktiv in der Delphientwicklung, es gibt hier sicher einige Leute, die das kompetent beantworten können.
Gruß, Jo
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen

  Alt 23. Feb 2020, 10:35
Grundlage sind (sehr viele) XML die in clientdatasets gespeichert werden. FDTable1.FieldDefs.Assign(ClientDataSet1.FieldDefs ) und copydataset würden mich hier schon recht einfach weiterbringen.
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.
"scheitert erstmal" ist ja schon Geschichte. Du kannst das natürlich alles mit Clientoperationen machen. FD Komponenten wären grundsätzlich der richtige Ansatz, dafür nimmt man ja Delphi.

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:
https://www.delphipraxis.net/203478-...-new-post.html)
- 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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen

  Alt 23. Feb 2020, 12:52
Accessvorteil "Verfügbarkeit" klingt nach professioneller Bürotätigkeit.
Auch wenn ich ACCESS nicht gerade freundlich gegenüber stehe, Programm aufrufen 3-7 klicks und Du hast Deine Datenbank. Alleine SQL-Server-Express richtig zu installieren und "Arbeitstauglich" zu machen hat mich schon einmal 3 Stunden gekostet (gut ich mußte etwas ältere mdb-Dateien verwursten)
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen

  Alt 23. Feb 2020, 13:14
danke, hilft mir erstmal weiter. ich werde mich den genannten intensiver auseindersetzen

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen

  Alt 23. Feb 2020, 13:25
  FDConnection1.ExecSQL('create table Testname (id integer, name1 varchar(10), name2 varchar(25),name3 varchar(40))'); Danke, war einfach .
interessanterweise wird die Tabelle in Access so mit der richtige Feldgröße angelegt.
Hast du mal kontrolliert, ob die Felder dann fixe oder variable Länge haben?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: Erstellen einer AccessDB über Firedac, falsche Feldtypen und -längen

  Alt 23. Feb 2020, 14:14
variable Länge mit den Größen, wie übergeben

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz