AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Create Table mit Firebird und ZEOS, wie richtig machen
Thema durchsuchen
Ansicht
Themen-Optionen

Create Table mit Firebird und ZEOS, wie richtig machen

Ein Thema von Jens Hartmann · begonnen am 26. Jan 2010 · letzter Beitrag vom 11. Feb 2010
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#11

Re: Create Table mit Firebird und ZEOS, wie richtig machen

  Alt 26. Jan 2010, 18:55
Zitat von DeddyH:
Those SET TERM statements are only needed if you work from an administration tool like isql or FlameRobin. If you run it from your application code, just send the EXECUTE BLOCK block as a single statement.
ich habe übrigens das ganze bis zum Ende gelesen. Ich habe das vieleicht nur nicht ganz verstanden. Also wenn ich das mit meinen Englischkenntnissen richtig verstehe, bedeutet das folgendes..
SET TERM 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.
Exceptionbehandlung und so muss allerdings noch angepasst werden..
Delphi-Quellcode:
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;
Das mit der Abfrage ob die Tabelle vorhanden ist klappt allerdings nicht.
Delphi-Quellcode:
Qry_CreateTableArea.SQL.Text :=
'SELECT 1 FROM rdb$relations where rdb$relation_name = "AREA"';
Qry_CreateTableArea.Open;
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...
Con_Info.GetTableNames 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.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Create Table mit Firebird und ZEOS, wie richtig machen

  Alt 26. Jan 2010, 19:19
SET TERM ändert das Terminierungsymbol, das ist wichtig um Befehlsende vom nde eines Blockes o.ä trennen zu können
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#13

Re: Create Table mit Firebird und ZEOS, wie richtig machen

  Alt 26. Jan 2010, 19:49
Zitat von mkinzler:
SET TERM ändert das Terminierungsymbol
Versteh ich nicht so recht. Aber ich hoffe das ich verstanden habe, das ich das bei Delphi nicht brauche.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#14

Re: Create Table mit Firebird und ZEOS, wie richtig machen

  Alt 26. Jan 2010, 20:46
Zitat von Jens Hartmann:
Das mit der Abfrage ob die Tabelle vorhanden ist klappt allerdings nicht.
Delphi-Quellcode:
Qry_CreateTableArea.SQL.Text :=
'SELECT 1 FROM rdb$relations where rdb$relation_name = "AREA"';
Qry_CreateTableArea.Open;
Es ist immer von Vorteil sich die Fehlermeldung anzusehen, oder wenigstens zu posten.
Ich vermute mal die lautete
Code:
Column unknown.
AREA.
Das liegt an den doppelten Anführungsstrichen. Die Angaben innerhalb der doppelten A.. interpretiert
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 von Jens Hartmann:
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
In einer Firebird-Datenbank existieren ein ganze Reihe Systemtabellen RDB$.., MON$...
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
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#15

Re: Create Table mit Firebird und ZEOS, wie richtig machen

  Alt 26. Jan 2010, 21:05
Zitat von alex517:
Es ist immer von Vorteil sich die Fehlermeldung anzusehen, oder wenigstens zu posten.
Ich vermute mal die lautete
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:
Qry_CreateTableArea.SQL.Text :=
'SELECT 1 FROM rdb$relations where rdb$relation_name = 'AREA';
Qry_CreateTableArea.Open;
Weil des SQL String muss doch auch in '' stehen.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#16

Re: Create Table mit Firebird und ZEOS, wie richtig machen

  Alt 26. Jan 2010, 21:10
Zitat von Jens Hartmann:
Wie schreibe ich das den dann in Delphi mit den '' Anfhrungszeichen.
einfach ZWEI einfach Anführungzeichen.
Delphi-Quellcode:
Qry_CreateTableArea.SQL.Text :=
'SELECT 1 FROM rdb$relations where rdb$relation_name = ''AREA''';
Qry_CreateTableArea.Open;
alex
Alexander
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#17

Re: Create Table mit Firebird und ZEOS, wie richtig machen

  Alt 26. Jan 2010, 21:11
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
Alexander
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#18

Re: Create Table mit Firebird und ZEOS, wie richtig machen

  Alt 27. Jan 2010, 06:31
Hallo,

mit den Strings ist das halt so eine Sache,
das geht dann mit DateTime weiter.
Also am besten gleich Parameter verwenden

Delphi-Quellcode:
Qry_CreateTableArea.SQL.Text :=
'SELECT 1 FROM rdb$relations where rdb$relation_name = :TableName';
Qry_CreateTableArea.ParamByName('TableName').AsString:= 'Area';
Der Doppelpunkt vor TableName zeigt an,
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
Heiko
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#19

Re: Create Table mit Firebird und ZEOS, wie richtig machen

  Alt 27. Jan 2010, 07:21
Zitat von hoika:
mit den Strings ist das halt so eine Sache,
das geht dann mit DateTime weiter.
Also am besten gleich Parameter verwenden
Delphi-Quellcode:
Qry_CreateTableArea.SQL.Text :=
'SELECT 1 FROM rdb$relations where rdb$relation_name = :TableName';
Qry_CreateTableArea.ParamByName('TableName').AsStrng:= 'Area';
100% Zustimmung
alex
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.292 Beiträge
 
Delphi 12 Athens
 
#20

Re: Create Table mit Firebird und ZEOS, wie richtig machen

  Alt 27. Jan 2010, 08:06
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.

  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz