| Autor |
Beitrag |
bis11
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mi 25.12.02 19:58
Hi,
wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht. Ich möchte mit folgender Unit einfach nur eine Datenbank erstellen und die dazugehörige Tabelle. Nur weiß ich nicht wo der Fehler liegt.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, IBDatabase, IBCustomDataSet, IBQuery;
type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; IBQuery1: TIBQuery; IBTransaction1: TIBTransaction; IBDatabase1: TIBDatabase; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin IBQuery1.SQL.Clear; IBQuery1.Sql.Add('set sql dialect 1;'); IBQuery1.Sql.Add('create database '+QuotedStr('bispf001:/data1/Interbase/Adressen.gdb')+';'); IBQuery1.Sql.Add('USER '+QuotedStr('sysdba')+' PASSWORD '+QuotedStr('masterkey')+';'); IBQuery1.ExecSql; IBQuery1.SQL.Clear; IBQuery1.Sql.Add('create table adressen'); IBQuery1.Sql.Add('('); IBQuery1.Sql.Add(' vorname CHAR(30) NOT NULL,'); IBQuery1.Sql.Add(' nachname CHAR(50) NOT NULL,'); IBQuery1.Sql.Add(' telefon CHAR(50) NOT NULL,'); IBQuery1.Sql.Add(' '); IBQuery1.Sql.Add(' PRIMARY KEY (nachname)'); IBQuery1.Sql.Add(');'); IBQuery1.ExecSql; end;
end. |
Was mache ich verkehrt oder was habe ich vergessen ?
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 25.12.02 21:23
Hi,
| bis11 hat folgendes geschrieben: | Hi,
wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht. ? |
Tannenbäume ?? Das wäre kein Wunder.  Ich sehe gerade "QuotedString", ich habe mir angewöhnt alles GROß zu schreiben.
Dann kann ich das QuotedString vergessen.
Fruß
Hansa
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 25.12.02 21:26
IBQuery1.Sql.Add('create database '+QuotedStr('bispf001:/data1/Interbase/Adressen.gdb')+';');
Dein Ausdruck sieht zum Schluß so aus : ;", das wars wahrscheinlich. Wie gesagt schreibe alles groß und lasse QuotedStr weg.
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mi 25.12.02 21:53
Hi hansa,
egal wie ich es mache, ich bekomme immer den Fehler Der Name der Datenbank fehlt. Ist eine Exception dr Klasse EIBClientError.
Quelltext 1: 2: 3: 4: 5:
| IBQuery1.Sql.Add('create database '+QuotedStr('bispf001:/data1/Interbase/Adressen.gdb')+';'); IBQuery1.Sql.Add('USER '+QuotedStr('sysdba')+' PASSWORD '+QuotedStr('masterkey')+';'); IBQuery1.ExecSql; IBQuery1.SQL.Clear; <<--- Hier bleibt er mit der Fehlermeldung stehen IBQuery1.Sql.Add('create table adressen'); |
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 25.12.02 22:21
Hi,
immer schön ruhig bleiben. Der Wald ist bei mir direkt vor der Haustür. Habe mir mal die Metadaten extrahiert :
Quelltext 1: 2: 3: 4: 5:
| CREATE DATABASE 'C:\ibx\EMPLOYEE.GDB' USER 'SYSDBA' PASSWORD 'masterkey' PAGE_SIZE 1024 DEFAULT CHARACTER SET ; |
Da ist vor USER kein ;  Bei Dir schon :
IBQuery1.Sql.Add('create database '+QuotedStr('bispf001:/data1/Interbase/Adressen.gdb')+';'); <---
IBQuery1.Sql.Add('USER '+QuotedStr('sysdba')+' PASSWORD '+QuotedStr('masterkey')+';');
weihnachtliche Grüße
Hansa
P.S.:Wir sind uns wohl einig, daß das da wirklich so ein KleinKram ist.
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mi 25.12.02 22:33
Ich bekomme immer noch die Fehlermeldung, trotzdem das ich das Semikolon weggenommen habe. Kann es sein, das ich meine IBDatabase verkehrt im Objektinspektor verkehrt konfiguriert habe ?
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 25.12.02 22:45
Hi,
Das hier läuft in IBconsole und IBexpert einwandfrei ab:
Quelltext 1: 2: 3:
| CREATE DATABASE 'C:\ibx\EMPLOYE2.GDB' USER 'SYSDBA' PASSWORD 'masterkey' PAGE_SIZE 1024; |
Dir steht anscheinend wirklich irgendwo eine Blaufichte im Weg.
weihnachtliche Grüße
Hansa
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mi 25.12.02 22:52
Klar, ich habe ja den SQL-Text aus der IBConsole übernommen bis auf das Semikolon, das war ein Schreibfehler im Delphi Source.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 25.12.02 22:58
Hi
| bis11 hat folgendes geschrieben: | | Klar, ich habe ja den SQL-Text aus der IBConsole übernommen bis auf das Semikolon, das war ein Schreibfehler im Delphi Source. |
Was denn jetzt, doch das Semikolon ? Also ich mache diese SQL-Create usw. Geschichten ohne Delphi. Geht schneller.
weihnachtliche Grüße
Hansa
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mi 25.12.02 23:00
Das heißt Du erstellst Deine Datenbank mit Namen und erstellst dann nur noch Deine Tabellen darein ? Ist das nicht etwas umständlich ?
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 25.12.02 23:22
Hi,
was ist hieran umständlich:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| /* Table: KG8 */
SET SQL DIALECT 3;
SET NAMES ISO8859_1;
/******************************************************************************/ /* Tables */ /******************************************************************************/
CREATE TABLE KG8 ( ID INTEGER NOT NULL, NR INTEGER NOT NULL, BEZ CHAR(25) NOT NULL );
/* Primary Keys */
ALTER TABLE KG8 ADD PRIMARY KEY (ID);
/* Triggers */
SET TERM ^ ;
/* Trigger: KG8_BI0 */ CREATE TRIGGER KG8_BI0 FOR KG8 ACTIVE BEFORE INSERT POSITION 0 AS begin IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID (GEN_KG8_ID,1); /* Trigger text */ end
SET TERM ; |
Das erzeugt mir eine primitive Kundengruppen-Table, die halt für die Kunden-Table gebraucht wird, als FOREIGN KEY z.B. für Lookup-Boxen. Dafür lege ich doch am besten ein SQL-Script an und lasse es bei der Erstinstallation einmal laufen, bevor ich mich in Delphi verirre. Schließlich macht Delphi auch nichts anderes. Außerdem mache ich das mit IBexpert, was viel besser ist, als die Standard-IBconsole. Wenn ich z.B. einen Primary Key anlege, werde ich gefragt "Generator anlegen ?" usw. Das ist schon gut, und sogar aus Deutschland. Die 199 EURO für die Vollversion lasse ich nächstes Jahr gerne nach Norddeutschland abwandern.
weihnachtliche Grüße
Hansa
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Do 26.12.02 11:56
Guten Morgen Hansa,
nur falls es Dich interessiert, ich habe es hinbekommen eine Datenbank auf dem IB-Server zu erstellen. Folgende zwei Zeilen Code sind dafür nötig :
Quelltext 1: 2:
| IBDatabase1.DatabaseName := 'server:/verz1/datenbank.gdb'; IBDatabase1.CreateDatabase; |
Weißt Du was der Fehler bedeutet TPB-Konstante () ist unbekannt im zusammenhang mit der Erstellung einer Tabelle ?
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 26.12.02 13:43
Hi bis11,
TPB = Transaction Parameter Buffer. Frag mich nur nicht , was das ist. Das () sieht so aus, daß er keinen Wert dafür hat, aber anscheinend einen braucht. Das Wort Buffer deutet darauf hin, daß irgendwo Speicher für die Transaktion allokiert werden muß, Du aber keine Größe zugewiesen hast. Aber das alles ist Theorie, um all diesem aus dem Wege zu gehen mache ich, wie bereits gesagt, solche Sachen lieber nicht mit Delphi. Also ich rate von solchen Geschichten ab. Wenn mein Programm einmal fertig ist, wird mit Sicherheit ein SQL-Script dabei sein, welches auf einen Schlag eine leere DB erzeugt. Moment, Du hast ja hoffentlich daran gedacht, daß bei SQL alles im Rahmen einer Transaktion laufen MUß ?  Nicht, daß die komplett fehlt.
weihnachtliche Grüße
Hansa
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Do 26.12.02 13:50
Hi,
ich habe die Transaktionskompo, die Database-Kompo und die Query-Kompo auf der Form. Diese drei Kompo's sind alle miteinander verknüpft. Hintergrund für meine Aktion ist, ich würde ganz gerne ein Programm schreiben, was für jeden mit einem IB-Server funktionsfähig ist. Deshalb möchte ich das mein Delphi-Prg die Datenbank erstellt.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 26.12.02 14:00
Hi,
wenn die in der Lage sind, den IBserver selber hinzukriegen, können sie auch ein SQL-Script ablaufen lassen. Da ich ersteres im Normalfall aber als nicht sehr wahrscheinlich ansehe, mußt Du meistens sowieso alles selber machen. Dann kannst Du Dir die Arbeit mit dem Delphi-Programm auch gleich sparen. Davon abgesehen würde mein SQL-Script nur R/O ausgeliefert werden.
Gruß
Hansa
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Do 26.12.02 14:42
Nach langem rumprobieren habe ich jetzt einen etwas unortodoxen Weg gefunden.
Folgende Komponenten brauche ich :
ZIbSqlQuery1: TZIbSqlQuery;
ZIbSqlTransact1: TZIbSqlTransact;
ZIbSqlDatabase1: TZIbSqlDatabase;
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
Dann erstelle ich eine Datenbank mit folgenden Codezeilen :
Quelltext 1: 2:
| IBDatabase1.DatabaseName := 'server1:/verz1/test_1.gdb'; IBDatabase1.CreateDatabase; |
Dann übergibt man diesen String an die Komponente TZIbSqlDatabase in die Eigenschaft Database. Nun kann ich mit den Zeos-Komponenten meine Datenbank bearbeiten so wie ich es möchte.
Ich gebe ja zu, es ist nicht perfekt aber es funktioniert. 
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 26.12.02 17:39
Hi,
| Zitat: | Ich gebe ja zu, es ist nicht perfekt aber es funktioniert.
|
Wenn es funktioniert, was willst Du mehr ? Noch eine Frage : Ist das ganze Dein Linux-Server ? Das BS habe ich nämlich mittlerweile auf einer separaten Festplatte installiert. Muß mal sehen, wier ich da weitermache.
Gruß
Hansa
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Do 26.12.02 17:50
Ja, das ist mein Linux-Server. Ich habe jetzt auch noch die Funktion rausbekommen, so das ich nur die Zeos-Kompos benutzen kann.
|
|