Autor |
Beitrag |
Grave_digger
      
Beiträge: 33
|
Verfasst: 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
      
Beiträge: 60
|
Verfasst: 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
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
      
Beiträge: 814
Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
|
Verfasst: 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 
      
Beiträge: 33
|
Verfasst: 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
      
Beiträge: 814
Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
|
Verfasst: 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 
      
Beiträge: 33
|
Verfasst: 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
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: 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 
      
Beiträge: 33
|
Verfasst: 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
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: 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
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: 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.  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. 
_________________ Gruß
Hansa
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 21.02.03 12:46
Ah, LCS wieder aufgetaucht ?
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
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: 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.
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
      
Beiträge: 814
Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
|
Verfasst: 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
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: 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.
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.  Aber wer weiß.
_________________ Gruß
Hansa
|
|
Grave_digger 
      
Beiträge: 33
|
Verfasst: 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 
      
Beiträge: 33
|
Verfasst: 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
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: 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 
      
Beiträge: 33
|
Verfasst: Mo 24.02.03 13:50
kann ich noch ein stück Quelltext kriegen das wäre net
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: 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
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 
      
Beiträge: 33
|
Verfasst: Di 25.02.03 14:28
ich bin satt danke jetzt kann ich mich mal wieder schlafen legen danke schön
mfg
|
|