![]() |
Datenbank: mysql+dbf • Version: 5.1 • Zugriff über: zeos + tdbf
DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Hallo zusammen,
ich arbeite seit langem mit MySQL und Zeos problemlos aus Delphi 6 prof (inzwischen etwas angegraut, tuts aber). Nun muss ich aus einer "Fremddatenbank" mit offenbar uralten *.dbf-Dateien einige Infos auslesen. Dazu habe ich die tdbf-Komponente ( ![]() In der "echten" SQL-Welt hole ich mir die gewünschten Informationen als Join über mehrere Tabellen (select * from tabelle1, tabelle2 where ....). Nun meine Frage: wie geht das mit den DBF-Tabellen? Gibts überhaupt sowas wie eine Query? Wenn ja, wie müssen da die Pfadangaben zu den einzelnen Tabellen rein? Konkret: pfad\schueler.dbf mit schuelerid als Primärschlüssel pfad\kurs.dbf mit kursid als Primärschlüssel pfad\belegung.dbf mit belegungid als Primärschlüssel und Fremdschlüsseln fs_schuelerid und fs_kursid (welcher Schueler belegt welchen Kurs) Jetzt hätt ich gern sowas wie
Code:
(dh. Namen aller Schueler im Kurs 23)
Select s.name, s.vorname, k.kursname from schueler s, kurs k, belegung b
where s.schuelerid = b.fs_schuelerid and b.kursid = k.kursid and b.kursid = 23 Ich habe dazu leider keine schlüssigen Infos gefunden. Mir ist klar dass das ein Uralt-System ist, aber das hilft mir nichts, ich muss da an die Daten ran und wäre über einen einfachen und schnellen Weg dankbar... Vielen Dank für die Hilfe (und falls es trivial ist bitte nicht steinigen...) :-) Danke! LG Heiko |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
DBF? war das nicht DBase?
Wenn ich mich nicht vertue kann die BDE doch mit DBase umgehen?? Ansonsten in ein "richtiges" System importieren und dann kannst Du mit SQL arbeiten. (ACCESS hat noch importfilter für DBF-Dateien, von da aus sollte der Import in ein richtiges System wohl funktionieren) Gruß K-H |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Hi K-H, Danke für deine schnelle Antwort.
Zitat:
Ich hatte mit der BDE noch nie was am Hut, deswegen hilft mir der gut gemeinte Hinweis leider nicht. Das Lesen der dbf-Files ist aber wie gesagt kein Problem. Zitat:
Irgendwie muss man diese einzelnen Tabellen-Dateien doch auch joinen können? |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Wenn es wirklich um dBase geht (100% sicher
![]() |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Natürlcih geht ein Join auch ohne Schlüssel. Nur ist die Perfomance dann schlechter. Schau Dir mal den Advantage Local Server an.
|
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Zitat:
Ich bin nur das "arme Schw....", das den Kram einlesen und aus den vielen verstreuten Einzelinformationen was Sinnvolles zusammenstellen muss... und immer noch hoffe, dass das über joins geht und ich mich nicht in ewiger Kleinarbeit mit Schleifen und lookups von Tabelle zu Tabelle hangeln zu müssen... |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
dbase ist eine 'teilrelationale' Datenbank, sie unterstützt Joins (siehe
![]() Man kann eventuell mit ClientDataSets und Master/Detail Abhängigkeiten einen Teil der zu Fuss Programmierung einsparen. Nachteil bei beiden (und auch bei ODBC Zugriff) ist, dass alle Datensätze in den Hauptspeicher geladen werden. Falls nicht noch zufällig eine DBF Komponente oder ein O/R Mapper auftaucht, ist das 'Zu Fuss' in Objektlisten einlesen nicht die schlechteste Alternative - vorausgesetzt die Datenmenge ist absehbar im RAM unterzubringen. |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
"Wenn" es sich um Visual Foxpro handelt, dann einfach den Visual Foxpro ODBC Treiber installieren und dann per ADO darauf zugreifen.
Damit klappt dann auch das JOIN |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Zitat:
![]() Damit habe ich das immer gemacht. Frank |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Hast du dir schon mal die "Master Tabellen Beziehungen" in
![]() angesehen? Das könnte dich weiterbringen. |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Hey Jungs,
vielen Dank für die vielen schnellen Antworten - klasse! Zitat:
Zitat:
Zitat:
Aber wenn das ginge, wär es wohl genau das was ich brauche... *Hoffnung*! |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Mit ADS (sybase) kannst Du in der lokalen Version kostenfrei arbeiten.
|
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Eine Suche bei Google bringt dich z.B.
![]() OLEDB-Treiber, der tut auch mit ADO (eigentlich sogar besser als ODBC) |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Um die Frage zu beantworten, bei den TDBF-Komponenten sind
Master-Detail Beziehungen natürlich auch über mehrere Tabellen möglich. Sprich, Baumartige Strukturen. |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Zitat:
Das ist dann schon etwas einfacher in der Handhabung :) |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Mit Standard Delphi geht es über TAdoCeonnection und TAdoQuery. Wichtig der richtige Connectionstring:
Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=<DEIN PFAD WO DIE DBF LIEGEN>;Mode=Share Deny None;Extended Properties=dBASE IV;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=17;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Zitat:
Code:
Allerdings kann man sich den Connectionstring ja auch schön per Doppelklick auf die ADOConnection zusammenklicken
Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=<DEIN PFAD WO DIE DBF LIEGEN>;Mode=Share Deny None;Extended Properties=dBASE IV;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=17;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False
|
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Zitat:
|
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Zitat:
In den Komponenten ist die TADSQuery, welche perfekt SQL - Statemants verarbeitet. Beim Zugriff (Benutzung von Index) kommt es auf die Indexe an. Da gab es wohl: .ndx (DBase II) .ntx (Clipper) .mdx / .cdx (?) TDataSet von SyBase kann IMHO mit allen Indexformaten umgehen. Bei ADO bin ich mir da nicht so sicher. Bei meinen Versuchen mit ADO habe ich es irgendwie mit dem OEM - Zeichensatz nicht hinbekommen. Ich habe noch eine EXE bzw. Source. Da habe ich für einen Kunden nur ein Statement gezimmert, welches aus eine Datei geladen komplexe Daten angezeigt hat. Bei Interesse könnte ich das schicken (Source ist mit DevExpress Grid, aber das Handling mit ADSQuery kann man als Basis sicher verwenden). Ist aber etwas grösser (PN angebracht). Wenn du es allerdings mit ADO lösen kannst, würde ich auf zusätzliche Komponenten verzichten. Frank |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Merci für die ausführlichen Hilfen, schau ich mir an und melde mich!
|
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Zitat:
Connectionstring konnte ich bequem im Delphi zusammenklicken. ADO-Query klappt "an sich" auch, super! Jetzt hab ich nur diverse Probleme mit dem SQL-92 (oder ist das ein anderer?). Konkret: a) in einer Tabelle stehen zwei Fremdschlüssel. Je nach Fall soll der eine oder der andere genommen werden und dann in der gleichen Query die Informationen aus der referenzierten Tabelle angezeigt werden. Konkret: ich hab Teilnehmer (Stammdaten...), Kurse (Infos zu den Kursen) und Belegung (welcher Teilnehmer ist in welchem Kurs). Dummerweise gibts zwei Belegungen (1. Jahr und 2. Jahr). JEtzt will ich natürlich nur die aktuell gültige Belegung haben. Mit MySQL geht das etwa so: select t.famname, t.rufname, ku.bezeichnung, ku.kursname, if(t.startjahr=2009, b.kursid_1, b.kursid2) as kursid from belegung b, teilehmer t, kurs ku where b.tnid = t.id and ku.id=kursid Hier wird also der alias aus der if-Abfrage in der where-clause verwendet. In der ado-query klappt das aber nicht, was - wie ich inzwischen gelesen hab - daran liegt, dass ein alias nur beim order by vorkommen darf. Außerdem gibts kein "if", sondern ein "iif", auch das hat 15min gedauert bis ich was gefunden habe... Große Frage: wie lautet die Query in sql-92? Sorry, geht über meine eingangs gepostete Frage hinaus, vielleicht weiß es ja trotzdem jemand auf die Schnelle...? Auf jeden Fall DANKE für den Tipp mit ADO und dem VisualFoxpro-Treiber, das ist klasse! |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Viélleicht so?
Code:
select t.famname,
t.rufname, ku.bezeichnung, ku.kursname, ku.id as kursid from belegung b inner join teilnehmer t on t.id = b.tnid inner join kurs ku on ku.id = iif(t.startjahr=2009, b.kursid_1, b.kursid2) |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Zitat:
...ja, ZIEMLICH GENAU so... :-D Danke! Nur für mich: anstelle einen Alias in der where-clause zu verwenden, nehme ich jetzt also immer einen (bzw. mehrere) inner join. Und aus "if" wird "iif". Bin gespannt was noch für Dialekt-Besonderheiten auftauchen... |
AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
Sei froh dass Du nicht von PL/SQL umsteigen musst. Dagegen kommt Dir jeder andere Dialekt "nackt" vor ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 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-2025 by Thomas Breitkreuz