Datenbank Umlaute

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Datenbank Umlaute

Beitrag von gocher »

mschnell hat geschrieben:
hde hat geschrieben:Zeos (7.1.2 - stable) --> Ado --> ODBC --> MSAccess

[Klugscheißer Modus on]

Zeos (7.1.2 - stable) --> Ado --> ODBC --> Jet Engine <-- MSAccess

-Michael :twisted:


[Klugscheißer Modus an]
Wenn dann ganz richtig, entweder
Zeos -> ADO -> OLE DB -> Jet OLE DB Provider -> Jet -> MSAccess
oder
Zeos -> ADO -> OLE DB -> Microsoft ODBC Provider for OLE DB -> ODBC -> Access ODBC Driver -> Jet -> MSAccess

Über ADO gibt es mehrere Möglichkeiten auf Datenbanken zuzugreifen selbst bei MSAccess existieren schon mehrere, z.B.
über den Jet OLE DB Provider direkt ohne ODBC und über ODBC (Open Database Connectivity), es ist lediglich eine Schnittstelle über OLE DB erforderlich!

OLE DB: Object Linking and Embedding Databases, (Low Level) COM (Component Object Model) basiertes Interface um standardisierten Zugriff auf Datenquellen zu ermöglichen.

ADO: ActiveX Data Objects, (High Level) einfach zu nutzende, Sprachen unabhängige API für den Zugriff auf von OLE DB unterstützte Datenbanken.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Datenbank Umlaute

Beitrag von mschnell »

Ist vermutlich alles nicht ganz korrekt, da Access (also das Benutzer-Programm) wahrscheinlich auch über ADO (oder nur über ODBC ?)) geht. Also irgendwie so:

Code: Alles auswählen

 
Zeos (7.1.2 - stable) --> Ado  <-- MSAccess
                           |
                           |
                            --> ODBC --> Jet Engine --> Datei
 


(unter Weglassen diverser Schichten dazwischen.)

Jedenfalls machen die ganzen Schichten die Sache nicht unbedingt flotter :D

-Michael
Zuletzt geändert von mschnell am Mo 2. Dez 2013, 09:07, insgesamt 1-mal geändert.

VB_Lazarus
Beiträge: 90
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
CPU-Target: 32Bit

Re: Datenbank Umlaute

Beitrag von VB_Lazarus »

Hallo,

ich würde gerne folgende Lösung nehmen, indem ich bei der SQLQuery die GetText und SetText Funktion nutze.
Leider muss ich bei dem Feldeditor schon vorher die Datenbank geladen haben.
Per ODBC ist mir dies bis jetzt nicht gelungen.
Er sagt immer wieder, das der ODBC-Treiber nicht die richtigen Parameter bekommt.
Wenn ich das Programm starte, dann ist alles richtig und es funktioniert.
Meine Frage, wann werden die Funktionen GetText/SetText aufgerufen?
Ist es möglich diese Funktion nachträglich zu erstellen?

Danke.
Gruß

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Datenbank Umlaute

Beitrag von gocher »

Ich habe mir nun mal die Mühe gemacht das Thema ADO genauer auszuarbeiten!
Also die unterschiedlichen Wege mit Free Pascal um über ADO auf eine Datenbank zuzugreifen, (COM-Interface, ADO-Interface, eigene ADO Implementierung oder Zeos) erklärt, also die Abhängigkeiten die benötigten Bibliotheken wo man sie findet, wie man sie generiert oder direkt zum Download, inklusive funktionstüchtiges Beispiel unter http://www.gocher.me/ADO-Free-Pascal.
Generieren der ConnectionStrings, inklusive Programm Source unter http://www.gocher.me/ADO-ConnectionString.
Erzeugen einer Eigenen ADO Implementierung, inklusive Sourcen unter http://www.gocher.me/ADO-Class-Example
und vieles mehr, wie z.B. erzeugen einer Access Datenbank, Komprimieren einer Access Datenbank, SQL-Dump, XML-Export natürlich alles mit Sourcen auch zum Download! Eine Übersicht findet Ihr unter http://www.gocher.me/Datenbanken, der Name scheint nicht zu passen da es ja bisher nur um ADO, ADOX, Jet, geht aber immer wenn ich nun Zeit habe werde ich mal wieder was zum Thema schreiben. Sicherlich werde ich auch noch mal die eine oder andere Routine optimieren, aber zum Start hoffe ich denjenigen die keine oder nur wenig Ahnung von ADO haben weiter zu helfen. Weil es bisher noch keine richtige Implementierung für Free Pascal gibt wünsche ich Euch viel Spaß damit.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Datenbank Umlaute

Beitrag von Antrepolit »

Kurios, dass an dem Thema immer noch gekaut wird. Ich arbeite mit Oracle über ODBC und ConsolteToUTF8 bzw. UTF8ToConsole. Das ist simple, es braucht keine Drittanbieterkomponenten und es läuft stabil unter 32 und 64 Bit. Von ADO würde ich abraten. Warum denn noch einen (weiteren) lahmen Gaul vor den Karren spannen? Das läuft weder besser noch schneller noch schöner. Und ob man nun ein DataSet oder ein ADODataset hat... bei Delphi mussten irgendwann bessere ADO-Komponenten gebastelt werden, weil die alten schon nichts taugten. Das Resultat waren dann die "BetterADODataSets", welche aber noch immer nicht gut waren.
Grüße, Antrepolit

care only if your os is really burning

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Datenbank Umlaute

Beitrag von gocher »

Sehr interessant, bitte ein paar mehr Infos, am Besten ein kurzes Beispiel für Deine Variante des Zugriffs auf Oracle, denn ich bin immer auf der Suche nach schnelleren Lösungen und dann noch Deine Alternative für den Zugriff auf MS Access, wie hier gefragt!
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

VB_Lazarus
Beiträge: 90
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
CPU-Target: 32Bit

Re: Datenbank Umlaute

Beitrag von VB_Lazarus »

Hallo,

ich habe im Anhang eine modifizierte Variante von dem Beispiel msaccess angefügt.

Diese Variante wandelt den Text (Umlaute) um.

Desweiteren wird die Datenbank ohne dsn Datei angehängt.
Aber das wird in einigen Threat ja schon gezeigt.

Zu ADO.

Dein Beispiel ist super. Soweit ich verstanden habe greift ADO über ODBC auf die Datenbank zu.
Was wiederum bedeutet, das eine Schnittstelle mehr angesprochen werden muss.
Ich persönlich habe mit VB über die OLE eine sehr gut stabile und einfache Datenbankverbindung herstellen können.
Ich denke es ist einfacher so wenig wie möglich an Schnittstellen zu verwenden, dann können sich wenige Fehler einschleichen.

Gruß
Dateianhänge
msaccesstest2.zip
(1.94 MiB) 115-mal heruntergeladen

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Datenbank Umlaute

Beitrag von Antrepolit »

gocher hat geschrieben:Sehr interessant, bitte ein paar mehr Infos, am Besten ein kurzes Beispiel für Deine Variante des Zugriffs auf Oracle, denn ich bin immer auf der Suche nach schnelleren Lösungen und dann noch Deine Alternative für den Zugriff auf MS Access, wie hier gefragt!

Was soll ich da denn genau posten? Es ist so simpel, wie ich es beschrieben habe. Details stehen in dem Link meines ersten Beitrags in diesem Thread. In jenem Blog steht wie man Oracle mit Lazarus über TOracleConnection nutzt und wie man dies mit ODBC tut. Oder soll ich die Informationen aus dem Blog nochmal 1:1 hier posten? Und mit Access klappt es über ODBC auf gleiche Weise. Lediglich LOBs bekomme ich nicht in die Access-Dateien.
Grüße, Antrepolit

care only if your os is really burning

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Datenbank Umlaute

Beitrag von gocher »

VB_Lazarus hat geschrieben:Zu ADO.

Dein Beispiel ist super. Soweit ich verstanden habe greift ADO über ODBC auf die Datenbank zu.
Was wiederum bedeutet, das eine Schnittstelle mehr angesprochen werden muss.
Ich persönlich habe mit VB über die OLE eine sehr gut stabile und einfache Datenbankverbindung herstellen können.
Ich denke es ist einfacher so wenig wie möglich an Schnittstellen zu verwenden, dann können sich wenige Fehler einschleichen.


Hallo VB_Lazarus,

auf der Seite http://www.gocher.me/ADO-Free-Pascal habe ich die unterschiedlichen Varianten einmal aufgelistet auch die OLE-Variante die Du aus VB kennst, Free Pascal: CreateOleObject('ADODB.Connection') entspricht VB: CreateObject("ADODB.Connection") leider habe ich bis jetzt keine ordentliche Möglichkeit gefunden ein COM-Interface in Free Pascal mit Codevervollständigung zu nutzen!
Übrigens in allen Beispielen auf der Seite, die MS Access betreffen, nutze ich den OLE DB Provider der Jet Engine, also nicht ODBC. Wie Dir vielleicht aufgefallen ist erzeugt Dein Zugriff CreateObject("ADODB.Connection") in VB auch einen Zugriff über ADO DB, es ist nur keine Interface Datei eingebunden die Definitionen enthält - also COM, wenn ich eine ADODB_6_1_TLB.pas einbinde entsteht dadurch keine neue Schnittstelle und im eigentlichen keine neue Abstraktionsebene, lediglich sind nun die Schnittstellen definiert und nicht unbedingt alles OleVariant!
Ich werde das Ole Beispiel um die Varianten des Zugriffs über den ODBC Treiber erweitern (Microsoft Access Driver (*.mdb)), obwohl ich den ODBC Treiber schon seit ca. 10 Jahren nicht mehr nutze, sondern den nativen Jet OLE DB-Provider.

Gruß Udo

[edit] Ich habe noch den Microsoft Access Database Engine 2010 ins Beispiel aufgenommen und den von Dir angesprochenen Microsoft Access ODBC Driver (unter Windows 7 konnte ich den aber nicht reproduzieren, nur auf einem alten Windows 2003 Server).
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Datenbank Umlaute

Beitrag von gocher »

Antrepolit hat geschrieben:
gocher hat geschrieben:Sehr interessant, bitte ein paar mehr Infos, am Besten ein kurzes Beispiel für Deine Variante des Zugriffs auf Oracle, denn ich bin immer auf der Suche nach schnelleren Lösungen und dann noch Deine Alternative für den Zugriff auf MS Access, wie hier gefragt!

Was soll ich da denn genau posten? Es ist so simpel, wie ich es beschrieben habe. Details stehen in dem Link meines ersten Beitrags in diesem Thread. In jenem Blog steht wie man Oracle mit Lazarus über TOracleConnection nutzt und wie man dies mit ODBC tut. Oder soll ich die Informationen aus dem Blog nochmal 1:1 hier posten? Und mit Access klappt es über ODBC auf gleiche Weise. Lediglich LOBs bekomme ich nicht in die Access-Dateien.


OK, in Deinem LInk hatte ich halt nur Infos zu dem Umlaut-Problem bei Oracle gefunden! Und das ein falsch kodiertes Ergebnis umzuformen ist, schien mir klar.
Also wenn ich Dich richtig verstanden habe nutzt Du SQLdb mit TOracleConnection, nutzt Du visuelle Objekte? Wenn ja wie und wo hast Du die Konvertierung eingebaut, ist dabei ein Umstieg auf eine andere Datenbank von Nöten wenn bei ihr das selbe Problem besteht?? Deshalb wäre das Beispiel so schön :)
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Datenbank Umlaute

Beitrag von Antrepolit »

Ja, ich nutze visuelle Komponenten. Ich nutze eine TOracleConnection parallel zu einer TODBCConnection, welche aber nur auf 64-Bit-Systemen aktiv wird, weil es da keine TOracleConnection gibt in Lazars. Ich nutze die SQLDB-Komponenten auch. Die Konvertierung führe ich beim Zugriff auf die Datasets durch, auf dem DBGrid ist sie ohne weiteres nicht anwendbar, aber ein DBGrid kann ja ohnehin nur einfachste Tabellenbeziehungen darstellen - wie oft hat man sowas schon? Einfügen über DBGrid sollte man sowieso nicht, weil die Transaktionssteuerung schlecht ist; wo fängt mann dann schließlich eine Exception beim Commit ab, wenn sich das Grid "um alles" kümmert? Dennoch nutze ich die Grids dort, wo es nur darum geht, einen permanenten Überblick über eine Tabelle zu haben, da sind mir die Umlaute dann egal. Aber wo immer es geht arbeite ich mit Stored Procedures. Für die Konfiguration von Oracle hilft dieser Link:

http://nobytes.blogspot.de/2013/08/lazarus-ide-and-toracleconnection-how-to.html

Für die Konfiguration über ODBC evtl. dieser:
http://nobytes.blogspot.de/2011/12/oracle-odbc-datenquelle-in-windows-7.html
Grüße, Antrepolit

care only if your os is really burning

TheRealHades
Beiträge: 11
Registriert: So 10. Feb 2013, 13:01
OS, Lazarus, FPC: Windows 10 20H2 (L 2.2.2 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Ottendorf-Okrilla

Re: Datenbank Umlaute

Beitrag von TheRealHades »

Hallo,

bei mir gingen die Umlaute in Access mit Utf8ToSys und SysToUtf8.

mfg Björn

nogo
Beiträge: 2
Registriert: Fr 19. Sep 2014, 15:23

Re: Datenbank Umlaute

Beitrag von nogo »

Vielen Dank, das funktioniert auch heute noch.

Nur, wie nutze ich das bei Umlauten in den Feldnamen?

viele Grüße,

Nogo

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6214
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Datenbank Umlaute

Beitrag von af0815 »

nogo hat geschrieben:Nur, wie nutze ich das bei Umlauten in den Feldnamen?

Das ist ein NoGo :-) Macht im allgemeinen nur Ärger, ist aber abhängig von DB-Server möglich. Siehe MySQL hier: https://dev.mysql.com/doc/refman/5.7/en/identifiers.html oder https://dev.mysql.com/doc/refman/5.5/en/identifiers.html. Den Feldnamen in Hochkommas oder eckigen Klamnmern einschliessen, ist wie gesagt vom System abhängig.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

nogo
Beiträge: 2
Registriert: Fr 19. Sep 2014, 15:23

Re: Datenbank Umlaute

Beitrag von nogo »

Da es um viele bereits bestehende Access Datenbanken, die in Firebird migriert werden sollen, geht, hab ich genau das vor, muss mit den Ausgangsdaten aber irgendwie umgehen.
UTF8ToSys ist für das einmalige Kopieren der Daten eine ausreichende Lösung.

Vielen Dank,

Nogo

Antworten