Quick Report aus 2 Datenbanken
-
Hallo
Ich möchte einen Bericht aus 2 verschiedenen Datenbanken (Paradox7) erstellen.
Aus der ersten DB (mitarbeiter.db) sollen die Felder "MANummer" und "MAName" sowie "MAVName" angezeigt werden.
Aus der zweiten DB (location.db) soll das Feld "LocName" angezeigt werden.
Beide Tabellen enthalten das Feld "LocID" über die die Datensätze in Verbindung gebracht werden können.
Als Zusatz (aber nicht zwingend notwendig) wäre es schön wenn der Bericht nach Namen sortiert wäre.
Der Bericht hätte dann Beispielsweise die Form:
------------------------------------------------------------------------
MitarbeiterübersichtMitarbeiter-Nr Name Vorname Arbeitsplatz
501 Muster Heinz Verwaltung
354 Neumann Volker Vertrieb
------------------------------------------------------------------------Erwähnen will ich noch das die Anzeige aus der mitarbeiter.db bereits funktioniert, ich weis nur nicht wie ich die 2te DB einbinden, anzeigen, und mit der mitarbeiter.db verknüpfen kann.
Kann mir irgendjemand helfen??
Gruß
RalfEdit: Ich benutze Borland C++ Builder 5 Enterprise
-
Keiner ne Idee oder Lösungsvorschläge???
-
zuerst mußt du einen Primärschlüssel und einen Fremdschlüssel deklarieren.In deinem Fall in Mitarbeiter Loc.ID als Primärschlüssel und in Location Loc.Nr dann kannsz du beide darüber verbinden, In deinem Programm könntest du auf die Datenbank per SQL Abfragen drauf zugreifen z.B
Abfrage---> Select Mitarbeiter.MANummer,Mitarbeiter.MAVName,Location.Locname from Mitarbeiter,LocationVersuch es
-
Ein Join über zwei Datenbanken!? Das wär neu!
-
Ok, aber wie komm ich dann von der SQL-Abfrage zu meinem Report???
-
Also da kann ich Dir nur eine wenig schöne und eine hässliche Lösung anbieten. Die wenig schöne ist, dass Du ein QReport erzeugst, der nicht an die Datenbanken gebunden ist (Du also die Datensätze per Hand einträgst). Die hässliche ist die, dass Du eine extra QReport-Datenbank mit den Daten fütterst. Du musst natürlich per SQL und Zwischenpuffer die Datenbankabfragen stückeln (Z.B. hole 1. Datensatz aus DB1 suche nach der Id von Datensatz 1 in DB2 usw.)
Gruß
Al
-
Die wenig schöne klingt besser, aber dazu bräuchte ich 2 DataSource Komponenten und 2 TTable's? Richtig?
Dann müsste ich aus denen 2 immer die ID's vergleichen....???
Und natürlich mit der OnNeedData Funktion arbeiten?
Werd mal versuchen ob ich das so hin krieg! Bei Problemen oder Erfolg meld ich mich wieder!
Danke schonmal!
-
ich hab das gefühl, dass du hier das wort datenbank mit tabellen verwechselst.
so wie ich dass sehe, hast du einfach nur zwei tabellen, also kannst du doch ganz einfach eine select-abfrgae über beide tabellen machenSELECT MA.MANummer, MA.MAName, MA.MAVName, Loc.LocName FROM mitarbeiter MA, location Loc WHERE MA.LocID = Loc.LocID
dann kannst du ganz einfach deinen QuickReport auf die ergebnismenge anwenden
-
ja, Ids vergleichen und dann geeignet in den Report schreiben (kanste auch in ein Report-Textfeld quetschen). Ich hatte ihn so verstanden, dass es zwei datenbanken sind, ansonsten natürlich ein Join, logo!
-
Hey!
Erst mal Danke! Hat funktioniert...
Doch jetzt steh ich vor nem neuen Problem!
Wenn ich während der Laufzeit die Datensätze ändere, übernimmt der QuickReport mir diese nicht.
Ich weis das es bei einer Table Komponente ne Refresh-Funktion gibt, gibts sowas bei ner Query auch?Außerdem kann ich mein QuickReport nicht umbenennen (Name-Eigenschaft ändern), da bringt er die Fehlermeldung:
[C++ Fehler] Unit2.cpp(11): E2316 '_fastcall TTest::{(TComponent *)' ist kein Element von 'TTest'Anmerken will ich noch das diese Fehlermeldung aus nem kleinen Testprogramm wo nur ein Formular mit Button ist, die den QuickReport aufrufen soll. Der QuickReport selbst ist leer.
Hoffe Ihr könnt mir nochmal so gut helfen!
Danke!!
MfG RalfPS: Ist bestimmt nur ne Kleinigkeit deswegen wollte ich nicht n neuen Thread aufmachen!
-
schreibst du den geänderten datensatz mit post() entgültig in die datenbank?
wenn nicht, dann mach dass, wenn ja, dann vergiss den beitrag
-
Mit Post nicht! Hab aber AutoRefresh auf True!
Wenn ich die Post()-Methode verwende stürzt das Programm ab mit der Fehlermeldung: "Datenmenge weder im Editier- noch im Einfüge-Modus!"
-
Scheint doch nicht nur n kleines Problem zu sein???
-
wenn du dich weder im Editier- noch im Einfüge-Modus befindest, dann frag ich mich, wie du überhaupt die datensätze änderst.
fürs ändern mußt du erst mit Edit() in den editiermodus wechseln (bezieht sich auf den aktuell ausgewählten datensatz), dann kannst du die feldwerte ändern und mit Post() schreibst du die daten endgültig in die DB.
fürs erstellen eines neuen datensatzes nimmst du statt Edit() einfach Append().wenn dass auch nicht weiterhilft, dann solltest du dein problem vielleicht nochmal genauer erklären.
-
Die Steuerung übernimmt die Navigatorleiste! Hinter der sich ja eigentlich nichts anderes als diese Funktionen verbirgt, oder?
Nach einem Neustart vom Programm sind die Datensätze ja drin. Also rein geschrieben werden se schon, allerdings leider zu spät.
Ich kann dir das Programm mal im I-Net zugänglich machen, einfach per E-mail melden oder hier posten.