Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Real Basic 2005: Datenbank auf anderem Rechner starten?

Real Basic 2005: Datenbank auf anderem Rechner starten?

Z09.07.0515:39
Ich hab mir in Real Basic 2005:mac eine einfache Datenbank erstellt, das ganze compiliert und es funktioniert.

Kopiere ich jetzt alle Ordner des Projektes (incl. der comilierten Anwendung und der Datenbank - Datei) auf einen anderen Rechner, lässt sich die Anwendung nicht starten, mit der Fehlermeldung, dass die Datenbank nicht gefunden würde.

Hab danach einen neuen Benutzer an meinem Rechner installiert, auf dem eigentlich RB 2005 drauf ist, und das Programm vom anderen Benutzer aus ausgeführt. Auch hier geht es nicht.

Gibt es da einen Trick oder Kniff, den man beachten muss, damit diese Anwendungen auf anderen Rechner/Benutzern laufen?

(PS: Es kann nur an der Datenbank liegen. Andere Programme die ich mit RB2005 ohne Datenbank - Unterstützung erstellt habe, laufen problemlos auf anderen Macs.)
0

Kommentare

Z09.07.0515:43
Hier noch ein Bild der Fehlermeldung:

0
rofl
rofl09.07.0515:54
Scheint so, als wäre der Pfad zu DB wohl fest verdrahtet. Was sagen die RB Foren?
0
polonius09.07.0519:08
Wie ermittelst du den Pfad zu deiner Datenbank? Kannst du vielleicht diesen Codeausschnitt zeigen?
0
Jan_L
Jan_L09.07.0519:58
Gib mal her den Code

Vielleicht solltest du es so machen:
dim db as new database
dim f as folderItem

f = //hier jetzt der Pfad deiner DB (schau mal unter "FolerItem Klasse" in der Doku)

if f nil then
db.databaseFile = f
if vocdb.createDatabaseFile then msgbox "DB erstellt!"
end if

0
Jan_L
Jan_L09.07.0520:00
if vocdb.createDatabaseFile then msgbox "DB erstellt!" sollte natürlich if db.createDatabaseFile then msgbox "DB erstellt!" heißen
Ist halt mal eben aus einem Programm von mir kopiert
0
Z09.07.0520:12
polonius
Wie ermittelst du den Pfad zu deiner Datenbank? Kannst du vielleicht diesen Codeausschnitt zeigen?

hmmm - gar kein Pfad?
Ich hab die Datenbank neu erstellt mit: Project Add Database
Und lag die Datenbank im Projektpfad.

Hier der passende Screenshot.
0
Z09.07.0520:13
@Jan_L: Wenn ich das so mache, ist der Pfad doch hardcoded? Das will ich ja auch nicht.
0
Jan_L
Jan_L09.07.0520:18
Das Problem ahtte ich am Anfang auch.

Mit "Project Add Database" bewirksts du, dass du einen (afaik absoluten) Link zur Datenbank, die du bei deinem Benutzer hast, erstellst.
D.h. auf anderen Macs/bei anderen Benutzern geht's nicht, weil sie genau diese Datei nicht haben. Das war auch mein Denkfehler.
Du hast einen Link auf /Users/Z/OrdnerWoDeinProjektIst/deineDB. Hat irgendjemand anders diese Datei? Ehr nicht .
Also musst du es wirklich übern Code machen.

Was meinst du mit "hardcoded"?????

Grüße
Jan_L
0
Jan_L
Jan_L09.07.0520:21
OK, das mit dem Link war nicht gut erklärt.
Ich stell mir das so vor (kann auch anders sein!):
Du hast ein Objekt der Klasse "RealDatabase" (wenn du diesen Datenbank-Typ benutzt. Ich hab nur RB 5.5). Die Eigenschaft DatabaseFile von diesem Objekt ist jetzt eben diese eine Datei.
Bringt also auf diese Art & Weise nix.

Jan_L
0
Z09.07.0520:28
ich hab die datenbank - Datei ja mitkopiert gehabt.
Hab jetzt in der Doku noch mal nachgesehen, und den entsprechenden Code eingebaut:

Dim dbFile as FolderItem
Dim db as REALSQLdatabase
db=New REALSQLdatabase
dbFile = GetFolderItem("datenbank.rsd")
db.DatabaseFile=dbFile
If db.Connect() then
//proceed with database operations here..
else
Beep
MsgBox "Error message: "+db.ErrorMessage
end if

Er brachte keine Fehlermeldung in der Umgebung, aber nach dem gebuildet und im anderen Benutzer, wieder die gleiche Fehlermeldung.
0
Z09.07.0520:30
Mit "hardcoded" meine ich, wenn ein Pfad fest vorm compilieren im Code festgelegt ist, und nicht durch den Benutzer geändert werden kann, da fest im Code.
0
Jan_L
Jan_L09.07.0520:44
Probier mal meinen Code von oben ^^

Warum sollte der User den Pfad denn nicht selbst bestimmen können? Kannst ja nen FolderItemDialog reinmachen.
0
Z09.07.0521:31
Nee, Dein Code geht auch nicht. Er zeigt ein Bug an.

0
Jan_L
Jan_L09.07.0521:37
if f nil then
...

(==Wenn die Date nicht nicht existiert )
0
Jan_L
Jan_L09.07.0521:38
ARGH!!!!
Ich fall immer wieder drauf rein! Spitze klammern werden geblockt X(
Also, es heißt: if f (spitzeklemmerauf)(spitzeklammerzu) nil then ...
0
Z09.07.0522:03
ne geht auch nicht.
hätte nicht gedacht, dass das so Probleme macht

0
Z09.07.0522:04
ich hab zwar dieses mal vergessen vocdb zu db abzuändern, aber so weit kam er ja gar nicht
0
polonius09.07.0523:47
Möglicherweise kann man nicht direkt mit der Database-Klasse arbeiten. In der Sprachreferenz steht unter Database folgendes:

A Database object represents an open database that can be accessed by REALbasic's "front-end" database commands. You can create or open a REALSQL database using the REALSQLdatabase class.

Die meisten Code-Beispiele der Sprachreferenz verwenden die REALSQLdatabase-Klasse.

Ich hatte mal Schwierigkeiten, mich mit meiner lokalen MySQL-Datenbank zu verbinden, bis ich gemerkt hab, dass ich die MySQLDatabase Klasse verwenden musste...

Ansonsten könnte evtl. ein Problem mit Zugriffsrechten vorliegen, oder es ist ein Bug in RB.
0
Jan_L
Jan_L10.07.0500:15
polonius
Möglicherweise kann man nicht direkt mit der Database-Klasse arbeiten. In der Sprachreferenz steht unter Database folgendes:

A Database object represents an open database that can be accessed by REALbasic’s "front-end" database commands. You can create or open a REALSQL database using the REALSQLdatabase class.

Die meisten Code-Beispiele der Sprachreferenz verwenden die REALSQLdatabase-Klasse.

Ich hatte mal Schwierigkeiten, mich mit meiner lokalen MySQL-Datenbank zu verbinden, bis ich gemerkt hab, dass ich die MySQLDatabase Klasse verwenden musste...

Ansonsten könnte evtl. ein Problem mit Zugriffsrechten vorliegen, oder es ist ein Bug in RB.

Es gibt in RB verschiedene KLassen, die Datenbanken darstellen, hängt auch von der Version ab. Bugs in RB gibt es zwar zu Genüge, aber das ist keiner und an den Zugriffsrechten kann es auch nciht liegen.

Z
Klappt es denn nun???
0
Z10.07.0501:53
Jan_L
Z
Klappt es denn nun???


Leider nein.
0
Jan_L
Jan_L10.07.0522:07
So geht's aber sicher (grad getestet):
dim db as new realDatabase
dim f as folderItem

f = getfolderitem("hallo.rbd")

if f nil then
db.DatabaseFile = f
if db.createDatabaseFile then msgbox "DB erstellt!"
end if
0
Z10.07.0523:48
das funktioniert auch nicht. bzw. mein ursprünglicher code funktioniert dann nicht mehr. hab heute vormittag und mittag ganzen zeit dran getüffelt und das da oben auch schon so mehrmals versucht.

im moment hab ich es so gelöst, dass ich die datenbank im finder umbenenne, aus dem projekt lösche, dann mit add Database select neu hinzufüge.

Dann kann man es weitergeben, wenn der Ordner beim Zielrechner genauso lautet.

Also nur Workaround, noch keine richtige Lösung.
0
Jan_L
Jan_L11.07.0500:21
Du vewendest anscheinend gar nicht die REALdatabase, sondern irgendwas anderes (REALbasic unterszützt ja viel). Hast du die Pro-Version? Da hat sich vielleicht auch was zwischen 5.5 und 2005 geändert
Da kann ich dir jetzt leider nicht weiterhelfen.
REALSQLDatabase scheint eine neue Klasse zu sein. Ich kenne sie zumindest nicht.

Jan_L
0
Jan_L
Jan_L11.07.0500:24
Könntest du mir mal alle Methode + Eigenschaften von RealSQLDatabase posten?
0
Z11.07.0509:41
Hmm - ich nutze nicht das alte RBDB (RealBasic DataBase), sondern das neue in RB 2005, das auf Basis von SQLite entwickelt wurde. Sieht man auch an der Dateiendung. Heisst jetzt .rsd und nicht mehr .rbd


Was genau soll ich posten? Soll ich einfach mal das gesamte Projekt zippen und hochladen?
0
Jan_L
Jan_L11.07.0516:45
Nein, ich meinte das du einfach die Doku-Seite von RealSQLDatabase postest.
Die REALDatabase setzt auf jeden Fall auch auf SQLite auf. Aber ich glaub, ich kann dir nicht mehr helfen, weil ich halt nur RB 5.5 hab (was sich bald ändern wird).
0
Stefan Sicurella
Stefan Sicurella11.07.0517:30
So gehts:

Dim f as folderItem

db=New REALSQLDatabase
f=getfolderItem("Daten")
f =f.child("Datenbankname")

db.DatabaseFile=f

if not db.connect() then
db = nil
msgBox "Fehler beim Öffnen der Datenbank"
end if

natürlich nur wenn du die SQLlite benutzt ansonsten schreibt du halt db=RealDatabse
0
polonius11.07.0518:08
Jan_L
Es gibt in RB verschiedene KLassen, die Datenbanken darstellen, hängt auch von der Version ab. Bugs in RB gibt es zwar zu Genüge, aber das ist keiner und an den Zugriffsrechten kann es auch nciht liegen.

Es ist mir schon klar, dass es in RB verschiedene Klassen für den Datenbankzugriff gibt. Und die Database Klasse ist, so wie ich das sehe, eine gemeinsame Basisklasse für die DB-Funktionalität. Um eine bestimmte DB-Engine nutzen zu können, muss man die entsprechende Klasse nutzen, also für das neue Datenbankformat die REALSQLdatabase (siehe Stefans Beispiel) und nicht die REALdatabase, oder die Database Klasse. Und wenn du die neue DB nicht mit der REALSQLdatabase Klasse nutzen kannst, stimmt etwas nicht. Das wollte ich mit meinem vorigen Beitrag aufzeigen, was mir aber offenbar nicht gelungen ist.
0
Z12.07.0520:45
Stefan Sicurella
So gehts:

Dim f as folderItem

db=New REALSQLDatabase

klappt bei immer noch nicht. wo genau fügt Ihr den Code hinzu? Ich füge es immer bei der Applikation Event Handler Open ein.

Bei dem Code - Schnippsel fehlt doch sicher auch noch ein DIM für db, oder?

0
Stefan Sicurella
Stefan Sicurella12.07.0520:53
Nein, nein... du machst eine Methode mit Namen:
zB Datenbank_open

dann eine globale Variable deklarieren DB as RealDatabase oder as REALSQLDatabase oder as RealDatabaseOldFormat

du musst halt wissen was deine DB ist...

Dann schreibst du das rein was ich unten geschrieben hatte.

wenn du jetzt die Datenbank benötigst öffnest du sie mit dem Aufruf der Methode "Datenbank_open"

In der integrierten Hilfe sind doch solche Beispiele drin

Gruß

Stefan
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.