![]() |
Re: Create Table mit Firebird und ZEOS, wie richtig machen
Zitat:
SQL-Code:
wird nur in Verbindung mit isql or FlameRobin benötigt. In meiner Delphi Aplication muss ich den EXCECUTE BLOCK als einzelnen Block senden. Entweder habe ich das falsch verstanden oder sonst einen Fehler in meinem Code. Das Create, den Trigger etc. habe ich übrigens alles alleine "DURCH LESEN" realisiert.
SET TERM
Exceptionbehandlung und so muss allerdings noch angepasst werden..
Delphi-Quellcode:
Das mit der Abfrage ob die Tabelle vorhanden ist klappt allerdings nicht.
Qry_CreateTableArea.SQL.Text :=
'CREATE GENERATOR GEN_AREA_ID; '; Qry_CreateTableArea.ExecSQL; DM_PS.ConPSConfig.Commit; Qry_CreateTableArea.SQL.Text := 'CREATE TABLE AREA (ID ID_DOM, BEREICH TEXT_DOM)'; Qry_CreateTableArea.ExecSQL; DM_PS.ConPSConfig.Commit; Qry_CreateTableArea.SQL.Text := 'ALTER TABLE AREA ADD CONSTRAINT PK_AREA PRIMARY KEY (ID) USING INDEX ID'; Qry_CreateTableArea.ExecSQL; DM_PS.ConPSConfig.Commit; Qry_CreateTableArea.SQL.Text := 'CREATE OR ALTER TRIGGER TRI_AREA FOR AREA '+ 'ACTIVE BEFORE INSERT POSITION 0 '+ 'AS '+ 'BEGIN '+ 'IF (NEW.ID IS NULL) THEN '+ 'NEW.ID = GEN_ID(GEN_AREA_ID,1);END'; Qry_CreateTableArea.ExecSQL; DM_PS.ConPSConfig.Commit; Qry_CreateTableArea.Close; Qry_CreateTableArea.SQL.Text := 'INSERT INTO AREA (ID,BEREICH)VALUES(:Id,:Bereich)'; Qry_CreateTableArea.ParamByName('Id').Value := 1; Qry_CreateTableArea.ParamByName('Bereich').Value := 'Verbrauchermarkt'; Qry_CreateTableArea.ExecSQL; DM_PS.ConPSConfig.Commit; except Form1.ServiceMemo.Lines.Add('Fehler beim erstellen von Tabelle Bereiche'); end; end;
Delphi-Quellcode:
Wie muss ich das mit dieser Anweisung denn verstehen. was und wo befinden sich diese beiden Datenbanken/Tabellen oder so. Wenn ich das richtig verstanden habe, sind diese in meiner DB integriert. Mit dem Befehl...
Qry_CreateTableArea.SQL.Text :=
'SELECT 1 FROM rdb$relations where rdb$relation_name = "AREA"'; Qry_CreateTableArea.Open;
Delphi-Quellcode:
werden mir diese auch Angezeigt. Aber verstehen tue ich die Funktion nicht und eine Exception bring sie auch. Vieleicht ist ja jemand in der Lage mir das mal zu verdeutlichen.
Con_Info.GetTableNames
Gruß Jens |
Re: Create Table mit Firebird und ZEOS, wie richtig machen
SET TERM ändert das Terminierungsymbol, das ist wichtig um Befehlsende vom nde eines Blockes o.ä trennen zu können
|
Re: Create Table mit Firebird und ZEOS, wie richtig machen
Zitat:
|
Re: Create Table mit Firebird und ZEOS, wie richtig machen
Zitat:
Ich vermute mal die lautete
Code:
Das liegt an den doppelten Anführungsstrichen. Die Angaben innerhalb der doppelten A.. interpretiert
Column unknown.
AREA. Firebird als Feldnamen. Deshalb auch "Column unknown". Du suchst aber einen String 'AREA' im Feld RDB$RELATIONS_NAME in der Tabelle RDB$RELATIONS! Und ein String muß in einfache Anführungsstrichen eingeschlossen sein. Zitat:
In den RDB$-Tabellen werden alle Metadaten, also die Struktur der Datenbank verwaltet. D.h. deine Tabelle 'AREA' findest du in der Tabelle RDB$RELATIONS, die dazu gehörigen Felder in der Tabelle RDB$RELATION_FIELDS wieder. Diese Systemtabelle können ganz normal mit SELECT abgefragt werden. Angezeigt werden die Systemtabellen z.B. bei IBExpert nur, wenn man das entsprechende Häkchen für "Systemtabellen anzeigen" setzt. Achtung! Es ist sicher lehrreich sich die Tabellen anzusehen. Auf keinen Fall sollte man aber die Inhalte der Tabelle ändern. Es sei den man weiß genau was man macht und hat ein Backup der Datenbank. Ich habe es bisher unterlassen, bis auf eine Ausnahme. ;-) alex |
Re: Create Table mit Firebird und ZEOS, wie richtig machen
Zitat:
Code: markieren Column unknown. AREA. Ja, das ist so. Aber dann steh ich entweder auf dem Schlauch oder ich weis nicht. Wie schreibe ich das den dann in Delphi mit den '' Anfhrungszeichen. Delphi akzeptiert das doch so nicht...
Delphi-Quellcode:
Weil des SQL String muss doch auch in '' stehen.
Qry_CreateTableArea.SQL.Text :=
'SELECT 1 FROM rdb$relations where rdb$relation_name = 'AREA'; Qry_CreateTableArea.Open; Gruß Jens |
Re: Create Table mit Firebird und ZEOS, wie richtig machen
Zitat:
Delphi-Quellcode:
alex
Qry_CreateTableArea.SQL.Text :=
'SELECT 1 FROM rdb$relations where rdb$relation_name = ''AREA'''; Qry_CreateTableArea.Open; |
Re: Create Table mit Firebird und ZEOS, wie richtig machen
noch was zum Thema:
Mit zunehmender Komplexität der Datenbank wird es immer schwieriger werden die Metadaten auzupassen. Es müssen Abhängigkeiten der Constrains, Abhängigkeiten durch Tabelle und Felder die in Triggern, Prozeduren und View verwendet werden usw. beachtet werden. Diese "Objecte" müssen ggf. deaktiviert/auskommentiert und dann in der richtige Reihenfolge wieder aktiviert werden. Für diese Zwecke liefere ich immer eine Standard-Datenbank aus, mit der dann die Kundendatenbank durch "fertige" Tools verglichen wird. Diese Tools liefern mir ein fertiges SQL-Script mit den erforderlichen Änderungen, welches ich nur noch auszuführen brauche. DatabaseComparer-Tools z.B.: - IBExpert Prof.-Version - IBEScript.exe, IBEScript.dll oder - Database Comparer von CleverComponents |
Re: Create Table mit Firebird und ZEOS, wie richtig machen
Hallo,
mit den Strings ist das halt so eine Sache, das geht dann mit DateTime weiter. Also am besten gleich Parameter verwenden
Delphi-Quellcode:
Der Doppelpunkt vor TableName zeigt an,
Qry_CreateTableArea.SQL.Text :=
'SELECT 1 FROM rdb$relations where rdb$relation_name = :TableName'; Qry_CreateTableArea.ParamByName('TableName').AsString:= 'Area'; dass es ein Parameter ist. Was ich nicht verstehe ist, dass du einen aufen Zeit mit Create Table verwendest, ohne eine Zeile "richtigen" Code geschrieben zu haben. Falls sich in der Tabelle noch etwas ändern sollte, fängst du wieder an. Schnapp dir IBExpert, lege dort komfortabel die Tabellen an und wenn du mit dem Programm fertig bist, kannst du dir immer noch überlegen, wie du die DB erzeugst / auslieferst. Heiko |
Re: Create Table mit Firebird und ZEOS, wie richtig machen
Zitat:
alex |
Re: Create Table mit Firebird und ZEOS, wie richtig machen
Zeos hat doch eine Komponente für die Metadaten dabei. Die stellst du einfach ein, welche du sehen willst und hast als Ergebnismenge z.B. die Tabellen. Darin kannst du dann suchen, ob vorhanden oder nicht und entsprechend reagieren.
:hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 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 by Thomas Breitkreuz