| |
|
|
- Seite 1 - |
|
Normann Strübli | Hallo,
habe die Ehre die Erste Frage hier stellen zu dürfen
Ich arbeite im Augenblick dem Datenbank-System Cheetah [...] und das ganze funzt auch fantastisch. Die Dll unterstützt den Funktionsaufruf mittels OLE Strings aber auch mit Standard null-terminierten Strings. So weit so gut...
Nun möchte ich die Memofelder nutzen um dort binäre Daten (Bilder) zu speichern. Da in der entsprechenden Funktion keine Bereichsvariable sondern nur der String übergeben wird ist die maximale länge ja auf 32767 Zeichen begrenzt - das langt aber nicht hin
Wenn ich das richtig verstanden habe sind OLE-Strings grob gesagt dynamische Strings die keine definierte Länge haben und jedes beliebige Zeichen enthalten können (verbessert mich bitte) und nicht von Profan unterstützt werden. -also Pech gehabt...
Eigentlich habe ich mir die Frage damit ja schon selbst beantwortet, oder ich habe da was übersehen???
Leider ist die Datenbank keine Freeware , aber Vielleicht hat ja jmd. Interesse die ganzen Funktionen für Profan umzusetzen - habe schon eine Include geschrieben die den Umgang vereinfacht.
Jetzt mag sich einer Fragen Warum ich die Dll überhaupt benutzte:
1. Sehr klein, stand alone 2. Sehr schnell 3. Umfangreiche Suchfunktionen 4. Will mich nicht mit SQL beschäftigen
hier nochmal kurz die Spezifikationen:
Max number of records: 2,147,483,647 Max number of fields: 1000 Max character field size: 256 Max numeric field size: 20 Max memo size: Limited by disk space Max record size: 4000 bytes
Indexes Max open indexes per database: 100 Max fields for compound indexes: 6 Total allowable open indexes: 1000 Queries
Max number of conditions: 50 Max sort expressions: 6 Multiuser
Max number of concurrent users: 255
Gruß Normann Strübli |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
| Gut, ne Hex-Datenkette wolltest nicht, dann ne komprimierte vielleicht? Ich würde Dir ne kleine DLL basteln damits schnell geht und damit Du die Kneete nicht in den Sand gesetzt hast. Die Dll könnte dann 2 Funktionen haben, eine die ein BinFile zu einem komprimiertem txt-file macht, und ne Gegenfunktion.
Bis denne, iF |
|
|
| |
|
|
|
Michael Wodrich | Ich habe mir das Beispiel mit den 2 Memodateien mal angesehen. Da wird erst ein String in der Länge der Datei vorbereitet und dann das File eingelesen. Beim Schreiben wird einfach der String angegeben.
Das ist genau wie in Deinem Beispiel. Allerdings würde ich das mit dem Char$() nochmals reaktivieren und testen. Denn genau so sollte es laufen.
Hast Du denn auch XProfan mit allen neuesten Patches versorgt? Der Char$() hatte ja mal Probleme mit den im String enthaltenen Nullen.
MfG Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 08.07.2004 ▲ |
|
|
|
|
Normann Strübli | Yup, die neuesten Patches hab ich installiert.
Michael, das Problem ist nicht der String selbst sondern wie ich ihn übergebe.
Was ich absolut nicht verstehe: Wenn ich einen String mit der addr() einer Funktion übergeben möchte dann klappt das nicht, siehe Profan Hilfe, da bei chr$(0) ende ist.
Jetzt habe ich aber einen Bereich# der die Daten enthält und sage einfach Bereich& = Bereich# und schon steht ja die Adresse der Bereichsvariablen im LongInt und ich kann ihn übergeben. (zumindest Theoretisch)
also Statt: xdbAssignField_Z(dbHandle&,0,PictureField&,addr(Daten$))
jetzt: xdbAssignField_Z(dbHandle&,0,PictureField&,Bereich&)
Wenn ich mir die Memo-Datei jetzt mal mit einem Editor angucke steht da tatsächlich was drin unzwar wieder genau bis zum Nullbyte GRRR! Aber Warum? Warum nicht alles???
@IF: Das mit der mini-Dll ist evtl eine Möglichkeit, aber sagt mir dennoch nicht zu. Danke für Dein Angebot! Das Problem ist (und es tut mir leid wenn ich so auf dem Theme rumreite) ich möchte verstehen warum das so ist wie es ist und nicht funktioniert. Und wenn es nicht an Xprofan liegt dann werd ich den Entwicklern der Datenbank mal meine Meinung dazu sagen (allerdings kenne ich nicht so viele englische Schimpfwörter )
Ok, ist schon spät bin müde und bevor ich dank es Stromausfalls (wg. dem kleinen Gewitter hier) alles neu schreiben muß sage ich da mal
Gute Nacht! |
|
|
| |
|
|
|
| [quote:499fc797e0]@IF: Das mit der mini-Dll ist evtl eine Möglichkeit, aber sagt mir dennoch nicht zu. Danke für Dein Angebot![/quote:499fc797e0] |
|
|
| |
|
|
|
Michael Wodrich | getreu dem Motto: was die Datenbank können soll, das soll sie dann auch ohne Fremdeinwirkung tun... Muß ich Dir irgendwie recht geben.
Aber wie wäre es statt mit schimpfen einfach mal mit Verbesserungsvorschlägen. Teile den Entwickern einfach mit, daß das mit den Memofeldern nicht in allen Programmiersprachen funktioniert und frage, ob sie nicht eine Funktion einbauen können, die eine Adresse und eine Längenangabe erwartet. Dann werden aus dem Speicherbereich, auf den die Adresse zeigt, genau Anzahl Bytes in die Memodatei kopiert (und Rückweg genau so). Das sollte dann mit allen Programmiersprachen funktionieren.
MfG Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 09.07.2004 ▲ |
|
|
|
|
Frank Abbing | Hi,
vielleicht können dir die APIs lstrcpy() und lstrcat() helfen. Die kopieren (bzw. hängen an) einen String in einen Buffer. Ansonsten kann dir vielleicht auch MultiByteToWideChar() oder WideCharToMultiByte() helfen. |
|
|
| |
|
|
|
Normann Strübli | [quote:8a80d2de32]vielleicht können dir die APIs lstrcpy() und lstrcat() helfen. [/quote:8a80d2de32] leider nein da sie als Parameter ebenfalls einen Nullterminierten String erwarten und er damit automatisch gekürzt wird. [quote:8a80d2de32]was die Datenbank können soll, das soll sie dann auch ohne Fremdeinwirkung tun... [/quote:8a80d2de32] Natürlich kann ich erwarten das alles einwandfrei funktioniert verdammt, so eine Sch&$% DB! Außerdem schimpf ich ja gar nicht! (auch wenn sich das vielleicht so liest)
Aber Du hast ja recht und ich habe wieder eine Mail an den Support geschrieben. Ich wollte halt gern ausschließen das es an mir oder Xprofan liegt, englische Mails verfassen gehört nämlich sicherlich nicht zu meinen Stärken, aber warum sollen die nicht auch mal was zu lachen haben bei der Arbeit.
Mal gucken was da passiert!
Andernfallst wäre es wohl nicht zu viel verlangt wenn Roland schnell mal eben eine Unterstützung für OLE Strings einbaut
Gruß Normann |
|
|
| |
|
|
|
| Hmmm, waren OLE Strings nicht diese, welche mit einem der Längenangabe beginnen (anzahl d. bytes) und dann mit dem eigendlichen Inhalt bestückt sind? Vielleicht kannst du das einfach über einen Bereich simulieren, hörst Du? |
|
|
| |
|
|
|
Normann Strübli | Ich höre...
versteh nur nicht ganz - war das jetzt ne Frage?
Weißt Du denn was OLE Strings genau sind? - ich nix genau weiß.
Gruß Normann |
|
|
| |
|
|
|
| Nun, wenn ich mich recht erinnere sind OLE-Strings nix weiter als Pointer mit einem 32bit Header welcher die Länge angibt.
iF |
|
|
| |
|
|
|
Normann Strübli | Du meinst also so:
FileData# < enthält sinngemäß z.B. den Inhalt der Datei DataOLE# < Enthält den simulierten OLE String
Adresse& = FileData#
LONG DataOLE#,0 = @SizeOf(FileData#), Adresse&
Also die ersten 4 byte geben die länge an und die nächsten 4 die Adresse der Bereichsvariablen.
Wenn ja dann geht nicht. :| |
|
|
| |
|
|
|
| Nee, probier mal 32bit größe, und rest Data.
Also
dim b#,8 long b#,0=4 byte b#,4=ord(t) byte b#,5=ord(e) byte b#,6=ord(s) byte b#,7=ord(t) |
|
|
| |
|
|