Zitat von
Perlsau:
Stimmt nicht: Ich habe eben genau das gemacht: Bei sämtlichen Queries im Datenmodul Active auf True gestellt, wobei die Connect-Komponente automatisch auf Connected = True steht.
Nun ja, ich verwende als Tabellenkomponente UIBDataSet und wenn ich das Projekt in Delphi lade, erhalte ich den Fehlerdialog, der auch erscheint, wenn ich ein Projekt lade, das eine in meinem Delphi nicht installierte Komponente voraussetzt.
Die Fehlermeldung lautet dann:
Ich habe jetzt auch das Feld Hostname leer gemacht aber eine Komponente UIBServerInfo mit drin, bei der ich die Eigenschaft Protocol mit "proLocalHost" belegt habe.
Das Problem mit der Zugriffssperre besteht weiter.
Wie aber kann ich nun den Zugriff auf meine Datenbank erreichen?
Ich habe die Datenbank tatsächlich mit IBExpert angelegt. Aber was kann ich jetzt tun, um die Datei zu entsperren?
Zitat von
Perlsau:
Ich empfehle daher ausdrücklich, auch Embedded-Versionen einer Firebird-Datenbankanwwendung erst als Server-Version zu entwickeln.
Gefällt mit überhupt nicht. Wollte mir mit der Embedded Version das Zugriffsrechtemenagement erst mal sparen. Wollte wie beim guten alten DBase die Datei anlegen, die Felder definieren und dann mit der Datei arbeiten. Schade, das das hier nicht so simpel ist.
Zitat von
Perlsau:
Ich verwende zur Unterscheidung einfach die Startparameter. Solange ich mit der Embedded-Version arbeite, steht bei mir in den Startparametern 1 E:\Datenbanken\Win7\Firebird\ drin. Bei Programmstart werden die ausgelesen und ausgewertet: 1 heißt Server, 0 oder gar nichts heißt Embedded. Steht 0 zusammen mit einem Pfad, liegt die
DB in diesem Pfad, fehlt der Pfad, liegt die
DB im Anwendungsordner (nur für Stickware, da ab Vista für das Schreiben in Program Files Admin-Rechte benötigt werden).
Hmmm. Mein Firebird Server liegt in C:\Programme\Firebird\, von da an voreingestellte Pfade.
Meine Embedded Version liegt einmal im Ordner meines Delphi Projektes und noch einmal in D:\Programme\Borland\
BDS\4.0\Projects\Firebird-Embedded\
Aber in einer Kommandozeile zuerst eine Ziffer????
Oder sieht die wirkliche Kommandozeile dafür anders aus? Wenn ja, wie? Dann übernehme ich nämlich diese Vorgehensweise.
Habe jetzt bei den Komponenten UIBConfig, UIBDataBase und UIBServerInfo die Eigenschaft LibraryName, die vorher auf gds32.dll gesetzt war, auf den Pfad meiner fbclient.dll des Firebird Servers gesetzt und damit kann ich erst mal ohne die Fehlermeldung die Datenbank aufrufen, das heißt, meine Anwendung startet ohne die vorherige Fehlermeldung. Ich kann aber noch immer keine Daten in meine Tabelle eigeben. Was muß ich dazu noch machen?
Wenn ich meine Anwendung aber außerhalb der
IDE starte, bekomme ich die
GUI nicht zu sehen, nach ca 60 Sekunden sagt mir Windows, das meine Anwendung einen Fehler verursacht hat und beendet werden muß. Ich muß sie dann im Taskmanager suchen und dort beenden. Im Taskmanager sehe ich meine Anwendung also.
Außerdem hatte ich nach der
SQL Anweisung:
CREATE TABLE meinetabelle(feld1 char(12),feld2 BIGINT, feld3 char(10));
bei Start nach dem Anlegen der Tabelle, die mittlerweile angelegt ist, die Fehlermeldung, das die Tabelle bereits existiert.
Nun weiß ich von
MySql, das es da eine Klausel "IF NOT EXISTS" gibt (CREATE TABLE IF NOT EXISTS meinetabelle (Feld1 Typ,Feld2 Typ,...);. Die Klausel "IF NOT EXISTS" wird aber hier als Fehler angemeckert. Wie kann ich da das
DB-System anweisen, die Tabelle nur dann zu erzeugen, wenn sie noch nicht existiert? Andernfalls soll besser ein SELECT * FROM meinetabelle erfolgen, damit ich meine Daten anzeigen kann.
in Pseudocode ausgedrückt also das hier:
if not(TableExists(MeineTabelle)) then Create Table MeineTabelle(...) else Select * from MeineTabelle
Wie erreiche ich das mit dem hier vorliegenden
SQL Dialekt, der das "IF NOT EXISTS" nicht zu kennen scheint?
.