Einzelnen Beitrag anzeigen

Slipstream
(Gast)

n/a Beiträge
 
#5

AW: Daten ohne DBGrid

  Alt 13. Feb 2017, 23:39
Hallo Community, die Suche habe ich schon bemüht (irgendwie), nur wenn man leider nicht weiß nach was man genau suchen muss ist das schwierig.
Einen Kalender mit Firebird und IbDac unter Delphi 2010 hab ich auch schonmal gebaut. War Teil einer umfangreichen Terminverwaltung für eine größere Firma. Für die Darstellung der Termine hab ich dennoch Grids verwendet, jedoch kein DBGrid, sondern StringGrids.

Am besten du fängst mit Konfiguration der Datenbank an. Dazu lädst du dir den Datenbankmanager von IbExpert herunter, der ist in der Personalversion kostenlos, das reicht in den meisten Fällen aus. Um die persönlichen Einstellungen der Benutzer ebenfalls in der Datenbank zu speichern, legst du eine Benutzertabelle an, die in ihren Spalten alle Optionen enthält, die der Benutzer abspeichern kann. Damit wäre erstmal gewährleistet, daß die Benutzereinstellungen auch beim Rechnerwechsel verfügbar bleiben.

Im Menü Datenbank des IBExpert Datenbankmanagers wählst du dein Eintrag Datenbank erzeugen. Befindet sich Firebird-Server und Datenbank auf deinem Arbeitsrechner, wählst du als Server local aus, ansonsten Remote und das entsprechende Protokoll. Beim lokalen Server musst du Servername und Port nicht angeben. Danach wählst du den Datenbanknamen. Der Eintrag Clientbibliothek sollte die fbclient.dll im Order Windows/System32 beinhalten. Die anderen Einträge sind selbsterklärend.

Benötigst du Boolean-Felder in deinem Projekt, must du dir erstmal eine Boolean-Definition anfertigen. Dazu doppelklickst du erstmal auf deine frisch angelegte Datenbank, worauf sich der Datenbank-Tree öffnet. Ganz oben wählst du mittels Rechtsklick Neue Domäne. Dort gibst du dann als Name z.B. MYBOOL an. Die Boolean-Deklaration verlangt einen Bezeichner, der die Zeichenfolge bool beinhaltet. Als Feldtyp wählst du SmallInt, weil Firedac das so erwartet, Unidac verlangt hier z.B. Integer. Das Feld Nicht Null wird angekreuzt. Standardquelle ist z.B. 0, das steht für False, oder 1, das wäre True. Im Feld Check steht VALUE IN (0,1), in die Feldbeschreibung kannst du reinschreiben, was du möchtst.

Dann klickst du mit rechts auf Tabellen und wählst Neue Tabelle. Dort trägst du zuerst den Tabellen-Namen ein, z.B. USERDATA. Dann legst du einen Primary Key an. Mit einem Doppelklick in das Feld PK wird diese Spalte deiner neuen Tabelle zum Hauptschlüssel. Als Feldname wählst du z.B. ID_USERDATA oder was auch immer. Um bei jedem neuen Datensatz automatisch den PrimaryKey hochzuzählen, machst du einen Doppelklick auf das Feld AI und erzeugst im erscheinenden Dialog einen Generator, einen Trigger und eine Prozedur.

Danach legst du weitere Userdaten-Spalten an, z.B. Username und Passwort für den Programmzugriff, Breite und Position des Programmfensters und alles sonst, was dein Herz begehrt. Hast du die Tabelle USERDATA fertig, klickst du auf den Blitz oben links und kompilierst deine Eingaben. Danach hast du eine Tabelle USERDATA, jedoch ohne Einträge. Die ersten Einträge machst du am besten auch mit dem IbExpert, indem du auf den Dateireiter Daten klickst, wo du dann Daten eingeben kannst.

Das wäre also der Schnelleinstieg in die Datenbankentwicklung.

Dann legst du in deinem Delphi-Projekt erstmal ein Datenmodul an. Dort hinein kommen dann alle Datenbank-Komponenten. In den Units, die dann Datenbank-Konnektivität benötigen, fügst du die Datenmodul-Unit in die Uses ein, das kann auch im Implementierungabschnitt geschehen.

Wenn du mit Firedac arbeitest, ist ein bisschen was zu beachten. Zuerst benötigst du eine TFdConnection, das ist die Datenbankverbindungskomponente. Danach benötigst du aber auch gleich mindestens eine TFDTransaction, besser zwei, weil du dann für normale Transaktionen und für Update-Transaktionen unterschiedliche Komponenten verwenden kannst. Des weiteren brauchst du einen TFDGUIxWaitCursor und einen TFDPhysFBDriverLink auf dem Datenmodul.

Beim Entwickeln stellst du das Property LoginPromt deiner TFdConnection erstmal auf False, damit du nicht bei jedem Testlauf die Anmeldedaten (Username und Passwort) für den Firebird-Server eingeben musst. Nun gehst du zum Property Params Als Characterset stellst du das ein, was du beim Anlegen deiner Datenbank eingestellt hast. Ich würde hier von vorneherein zu UTF8 raten, was du damit alle verfügbaren Zeichen in Strings verwenden kannst. Unter Database gibst du den vollständigen Datenbank-Namen (=mit Pfadangaben) ein oder wählst ihn aus dem Dateidialog. Ganz wichtig, wenn du Boolean-Felder verwenden willst: Das Property ExtendedMetaData muss auf True stehen. Als SQL-Dialekt sollte 3 gewählt werden, in den Properties Password und Username sollten gültige Daten stehen. Ganz unten stehen dann noch die Properties Transaction und UpdateTransaction aus, wo du deine beiden Transaktionskomponenten einstellst.

Wenn du alles richtig gemacht hast, sollte ein Klick auf das Property Connected die Verbindung zur Datenbank herstellen.

Nun legst du ein TFDQuery auf das Datenmodul. Hast du nur eine Datenbank-Komponente auf dem Modul, wird diese beim Query automatisch eingetragen. Im Query suchst du zuerst das Property SQL auf und trägst dort z.B. ein: select * from Userdata. Das wäre deine Tabelle Userdata in der Datenbank. Unter Transaction und UpdateTransaction wählst du die beiden Transaktionskompenten, die sinnvollerweise entsprechende Bezeichner tragen, z.B. TransMain und TransUp. In den UpdateOptions trägst du nun unter AutoIncFields den Primary-Key ein, wenn du ihn in der Datenbank bereits als automatisch hochzählendes Feld angelegt hast. Unter Generatorname kommt der FB-Generator rein, und unter KeyFields wieder der Primary-Key. Unter UpdateTableName kommt der Tabellenname rein.

Wenn du alles richtig gemacht hast, sollte ein Click auf das Property Active die Datensatzmenge aus der Datenbank ins Query laden. Ein Doppelklick auf das Query öffnet den Abfrage-Editor, wo du die Inhalte der Tabelle abrufen kannst.

So, das war jetzt eine Kurzanleitung zum Einstieg. Morgen bei Bedarf weiteres.
  Mit Zitat antworten Zitat