Autor Beitrag
Grave_digger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mo 17.02.03 19:30 
meine Frage ist warscheinlich lächerlich aber ich finde keine Lösung

ich habe Jahrelang mit Paradox-datenbanken gearbeitet und muss nun auf Interbase umsteigen leider scheint es mir so das mir das verständnis fehlt. ich habe bereits Bücher(z.B. Interbase Datenbankentwicklung mit Delphi) durch gearbeitet aber irgend wie komme ich nicht weiter deshalb bitte ich um hilfe am liebsten wäre ich mir ein stück Quellcode der sehr gut dokumentiert ist oder eine ausführliche beschreibung in deutsch
yukon-troll
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 60



BeitragVerfasst: Di 18.02.03 14:29 
Hallo,

die Erstellung geht ähnlich wie an der IB-Console.

Hier ein kurzes Beispiel:

du erstellst ein Formular mit folgenden Komponenten

IBDatabase (IBD)
IBTransaction (IBT)
IBSQL (IBSQL)

sowie einen Button.

DatabaseName sollte auf eine vorhandene Interbase-Datenbank zeigen,
IBDatabase und IBTransaction sollten gegenseitig zugewiesen sein
(DefaultTransaction bzw. DefaultDatabase).

Bei einem Klick auf den Button führst du folgenden Code aus

ausblenden volle Höhe Quelltext
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:
uses DBLogDlg;

procedure TForm1.ButtonClick(Sender: TObject);
var
  s : string;
begin
  s := 'CREATE TABLE STEUER '
       + '('
       + '  ST_CODE  INTEGER NOT NULL, '
       + '  ST_PROZENT  DOUBLE PRECISION, '
       + '  ST_AB_CODE  VARCHAR(4) CHARACTER SET ISO8859_1, '
       + ' PRIMARY KEY (ST_CODE) '
       + ');' ;

  //zur Datenbank verbinden
  IBD.Connected := true;
  //neue Transaktion starten
  if not IBT.InTransaction then
    IBT.StartTransaction;
  
  //SQL-String setzen
  IBSQL.SQL.Clear;
  IBSQL.SQL.Add(s);
  //SQL Anweisung ausführen
  IBSQL.ExecQuery;

  //Änderungen in DB speichern 
  IBT.Commit;
  
  IBD.Connected := false;
end;


mfg
foxy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Di 18.02.03 15:28 
dann legst du die DB aber wärend der Laufzeit an .... ich hab es immer so gemacht, das ich alles über die IB console gemacht habe ....

ich habe ein schönes tut dazu .... mom .... ich suche :)

ich habs und zwar hier

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
Grave_digger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Di 18.02.03 16:11 
und was muss ich tun wenn ich erstmal eine Datenbank anlegen muss?

den Quellcode und tut habe ich durch gearbeitet und es funktioniert aber ich möchte gern mein eigene Datenbank benutzen und die muss ich wenn nicht vorhanden zur Laufzeit anlegen kann also nicht mir der IBConsole arbeiten

danke für alle Antworten

MFG
Grave Digger
foxy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Di 18.02.03 16:27 
wiso willst du mit IB anfangen???

dein kommentar wenn sie nicht vorhanden ist muss ich eine neue anlegen .... also halte ich bei einer Client/Server Beziehung für sehr riskant ... wenn ein User lustich ist dann haste auf einma 100 dbs auf deinem server liegen ....
Damit meine ich, zur Laufzeit eine DB erstellen, würde ich mir genau mal überlegen was du machen willst ....

meine Meinung bitte korrigiert mich :?

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
Grave_digger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mi 19.02.03 09:28 
ich will mir die installtion erleichtern ich arbeite bis jetzt mit Paradox im Netzwerk aber dort bin ich inzwischen an die Grenzen gestossen und möchte auf IB umstellen
und damit der nutzer die Datenbank nur einmal anlegen kann benutze ich schon Kennzeichen die ein doppel anlegen verhindern. Aber wie schon gesagt möchte ich mir nur die Installation erleichtern

MFG
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 19.02.03 09:45 
Hi,

Du mußt Dir mal überlegen, was ein SQL-Script ist. Damit kannst Du eine Datenbank auch komplett neu erzeugen. Du brauchst auch nicht extra ein Installationsprogramm zu schreiben. Ich würde bzw. liefere bei solchen Dingen eine leere DB mit meinem Programm aus, die ich mit dem Script erzeuge.

P.S.: "leere DB" bedeutet : ohne Daten, die Struktur wird mit dem Script gemacht.

_________________
Gruß
Hansa
Grave_digger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 21.02.03 10:46 
Es wird leider so gefordert

ich kann mit SQL leider noch nicht sehr viel anfangen deswegen brauch ich hilfe
der vorschlag mit der leeren datenbank ist in betracht zuziehen da das eine einfache lösung wär

mfg
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Fr 21.02.03 12:40 
Hi
in aller Regel erzeuge ich die Datenbank während der Entwicklung mit der IBConsole und die Strukturen innerhalb der DB per SQL-Script. Wenn dann alle Strukturen feststehen, mache ich von dieser DB ein Backup mit der Console und diese .GBK Datei wird mit dem Programm installiert.
Bei Bedarf verwende ich dann einfach den IBRestore-Service um mit diesem Backup aus dem Programm heraus die richtig DB zu erzeugen.
Dadurch brauchst du auf dem Zielrechner nicht mit SQL-Scripts zu hantieren und die Backup-Datei ist gerade mal ein paar KB gross.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 21.02.03 12:41 
Grave_digger hat folgendes geschrieben:
Es wird leider so gefordert...
der vorschlag mit der leeren datenbank ist in betracht zuziehen da das eine einfache lösung wär


Fast hast Du es geschnallt. :mrgreen: Also nochmals :

1. Du machst die leere Datenbank ohne Delphi, am besten mit einem Script, die kopierst Du und fertig, dann hat derjenige, der eine Datenbank fordert seine Datenbank und die Daten muß er dann mit Hilfe Deines Progammes eingeben

2. Mit viel Mühe schreibst Du Dir dafür ein eigenes Programm, was dasselbe macht und somit das Rad zum zweiten mal erfindet. Dann noch viel TamTam : schreibe hin "soll die Datenbank wirklich erzeugt werden". Wird das getan erklärst Du was jetzt pasiert. Dann läßt Du noch ein Video ablaufen. Mit den einzelnen Tables dasselbe. Dann sagt der Kunde "Aha" und ist beeindruckt von Deinem Treiben, wenn er denn überhaupt zuschaut. Er weiß ja sowieso, daß er nichts versteht. Schließlich will er nur seine Datenbank. Wegen vor Ort eventuell auftretender Fehler in Deinem Programm mußt Du dann wieder abziehen und die fragen sich wenn Du weg bist : "Hä, was hat der Spinner vorhin da gemacht ?" Um dies zu vermeiden mußt Du also trotzdem noch eine leere Datenbank mitnehmen.

So krass kann der Unterschied aussehen. :nixweiss:

_________________
Gruß
Hansa
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 21.02.03 12:46 
Ah, LCS wieder aufgetaucht ? :P
LCS hat folgendes geschrieben:
...
Dadurch brauchst du auf dem Zielrechner nicht mit SQL-Scripts zu hantieren und die Backup-Datei ist gerade mal ein paar KB gross.


1. Warum soll er auf dem Zielrechner mit Scripten hantieren :?: So habe ich das nicht gemeint.

2. Warum sollte die GBK und nicht gleich die GDB kopiert werden :?:

_________________
Gruß
Hansa
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Fr 21.02.03 13:00 
Hi
Hansa hat folgendes geschrieben:

Ah, LCS wieder aufgetaucht ?

Ja, bin wieder aus den Versenkungen des netzwerklosen Daseins emporgestiegen. :mrgreen:

Die GBK ist einfach kleiner und vor allem Versionsunabhängig. Wenn du den Restore-Service verwendest, ist es egal welche IB-Version der Kunden nun gerade laufen hat.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
foxy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Fr 21.02.03 13:00 
noch was ... du hast gesagt willst deine inst. leichter machen ....
du weist, das du auf jeden fall den Client in deiner Inst. auch mitinst. must oder??

also den client für die IB!

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 21.02.03 13:35 
LCS hat folgendes geschrieben:
Hi
Ja, bin wieder aus den Versenkungen des netzwerklosen Daseins emporgestiegen.

huch, dabei dachte ich Du seiest in den Unendlichkeiten des Netzwerks verschollen. 8)

Zitat:
...vor allem Versionsunabhängig

Das ist das wichtige :!: Ist sie leer, spielt die Größe an sich wohl keine Rolle. Naja, da habe ich wahrscheinlich nur bis zum nächsten Kirchturm geschaut. Bei mir wird es wahrscheinlich darauf hinauslaufen, daß immer das IB drauf ist, was ich will. :mrgreen: Aber wer weiß.

_________________
Gruß
Hansa
Grave_digger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 21.02.03 15:27 
Das ich IB installieren muss ist klar aber ich will sowas wie ein installtion programm nicht schreiben sondern eigentlich nur kopieren und schnell eine INI-anpassen über eine Schnittstelle und dann wieder weg
das mit der leeren datenbank ist angenommen jetzt habe ich nur noch das problem mit der anmeldung an die datenbank wärend der Laufzeit :?:

ist es den so schwer eine Datenbank während der Laufzeit anzulegen :?:

mfg
Grave_digger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mo 24.02.03 11:15 
kann mir den keiner helfen
ich weiß ich nerve aber warum ist es so schwer ein datenbank während der laufzeit anzulegen :?:
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 24.02.03 11:23 
Das ist eigentlich gar net schwer:

Du nimmst die IBDatabase-Kompo, trägst alles ein (DBPfad, Server, user, passwort, parameter) und machst CreateDatabase, das wars.

Danach kannste dann ein Skript ausführen lassen, am besten mit einer IBSQL-komponente, das dann die Tabellen, Prozeduren, Trigger usw erstellt. Du musst das dann nur noch Befehlsweise übertragen ein komplettes Skript kannste mit IBSQL nicht ausführen. Das wars schon, hab das bei mir auch schon gemacht..

Gruß
Grave_digger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mo 24.02.03 13:50 
kann ich noch ein stück Quelltext kriegen das wäre net
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 24.02.03 15:12 
OK, dann werf ich das Fleisch mal den Wölfen vor *g*. Das kommt aus einem meiner Projekte, da hab ich ein SQL-Script als RCDATA-Resource in der EXE
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
//Soll eine neue Datenbank erstellt werden?
IBDatabase.DatabaseName:=EDserver.Text+':'+EDpath.Text;
IBDatabase.Params.Clear;
IBDatabase.Params.Add('USER "'+userED.Text+'"');
IBDatabase.Params.Add('PASSWORD "'+pwED.Text+'"');
IBDatabase.Params.Add('PAGE_SIZE 4096');
IBDatabase.SQLDialect:=3;
 try
  IBDatabase.CreateDatabase;
  //Wenn Neu, dann SQL-Script ausführen
  IBDatabase.Connected:=True;
  IBTransaction2.Active:=True;
  SQLScript:=TResourceStream.Create(hInstance,'SQLScript',RT_RCDATA);
  Script:=TStringList.Create;
  Script.LoadFromStream(SQLScript);
  for i:=0 to Script.Count-1 do begin
       if (Script.Strings[i]='') then Continue;
       if (Script.Strings[i][1]<>' ') AND (Script.Strings[i][1]<>'/') then begin
           IBSQL1.SQL.Text:=Script.Strings[i];
           IBSQL1..ExecQuery;
           end;
       end;
  finally IBDatabase.Connected:=False;end;


Dabei wird die Resource SQLScript geladen und zeilenweise (außer Kommentaren und leeren Zeilen) in IBSQL ausgeführt. Wichtig ist, dass in der Resource wirklich ALLE Befehle in einer einzigen Zeile stehen

Hoffe, Du konntest damit was anfange, habs net besonders überarbeitet

Gruß
Grave_digger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Di 25.02.03 14:28 
ich bin satt danke jetzt kann ich mich mal wieder schlafen legen danke schön
mfg