Italia
Foro

Ole Strings

 

Normann
Strübli
Ciao,

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 supportati 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 trasferimento 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 supportati 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 per 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

Saluto
Normann Strübli
 
16.05.2004  
 




Frank
Abbing
Hi,

[quote:a2dedb3643]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 trasferimento 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 supportati werden. -also Pech gehabt...
[/quote:a2dedb3643]
Das klingt doch alles nach Bereichen. Wieso kannst du dort keine Bereichsvariable trasferimento ? Sollte doch immer funktionieren...
 
17.05.2004  
 




Normann
Strübli
Ciao,

irgendwie klappt das alles nicht so wie ich mir das denke
Daher hab ich mal einen neuen kurzen (echt nicht lang ) Quellcode geschrieben und meine Include und Headerdatei gezippt drangehängt.
Die Hilfedatei von Cheetah ist ebenso dabei wie Beispiele unter Power
und VisualBasic.

Sind leider knapp circa 300kB geworden :|
Die Registrierung hab ich naturalmente entfernt daher kann es possibile
sein das beim Aufruf der Fehler #99999 Auftritt
(weil testversion abgelaufen). Vielleicht braucht man die DLL ja auch
nicht und sieht gleich wo ich da groben Mist gebaut habe.

Wie gesagt habe anscheinend Probleme das ganze per Xprofan
umzusetzen - naja die einfachen Sachen gehen ja...

Saluto
Normann
 
17.05.2004  
 



Hmmm, ist schwer da durchzusehen, oder gar das Ganze durchzusehen. Vielleicht will die DLL nicht die Bereichsvariable, sondern nur die Adresse der Bereichsvariable, also statt bereich# einfach addr(bereich#).

Vielleicht hilfts Dir ja.

, iF
 
21.05.2004  
 




Frank
Abbing
Hi,

wenn du den Bereich dimensioniert, addiere mal 4 dazu und lösche den Bereich mit CLEAR, bevor du ihn benutzt.
Wahrscheinlich fehlt die Null am Ende, wenn du den Bereich als String in einer API nutzt.
 
22.05.2004  
 




Normann
Strübli
Seufz :|

danke, aber hat beides leider nicht geholfen. Als letzten Anlauf hab ich nochmal die Stellen der Doku rausgesucht die, so glaub ich von interesse sind.
Weiter unten dann der Quellcode per Visual-Basic, wie man Daten in Memofelder schreibt.

Sieht doch so verdammt einfach aus, wieso krieg ich das nicht hin?

Ok, das erste was wohl anders sein wird ist die Geschichte mit den Strings.

Hier ein kleiner Ausschnitt aus der Aiuto:

[quote:a91e835882]
Cheetah can be interfaced with various different programming langauages. By default, Cheetah supports the Visual Basic and PowerBasic, however other programming languages can be interfaced with relative ease.

The key to interfacing to the Cheetah DLL is to understand how strings are handled by your particular programming language. In general, there are two different types of strings that most languages support: OLE Strings, and Nul Terminated Strings. Some languages support both types while others only support one or the other.

OLE Strings (or BSTR strings) are generally used in programminbg languages that allow for dynamic strings. An example is Visual Basic and PowerBasic.

Nul Terminated Strings, or ASCIIZ strings, are a pre-declared array of characters with a terminating nul (CHR$(0)) character at the end of the string. The programming language uses this nul character to mark the end of the string.

In order to support both types of strings, Cheetah has implemented each function in two forms. The regular version of the function supports OLE Strings while the second version supports Nul Terminated Strings. The functions that support Null Terminated Strings have a trailing _Z appended to their names. For example, the following is the two forms of the xdbCreate function.

OLE Version: Call xdbCreate(DBFname)NUL Version: Call xdbCreate_Z(DBFname)
Basically, if your programming language only supports Null Terminated Strings then you should always use the _Z version of the Cheetah functions.

[/quote:a91e835882]
Ok, Profan supportati nur Null-Terminierte Strings das sollte das ganze aber nicht viel komplizierter machen.
Verwende ich halt die Funktion xdbAssignField_Z statt xdbAssignField um ein Feld zu beschreiben. Bei dem folgenden Beispiel in VB wird ja aber ein String trasferimento? oder doch nicht?

Da bin ich wieder beim Thema OLE-Strings

Andererseits wenn ich folgendes in Profan probiere klappt es:
KompilierenMarkierenSeparieren
...
Declare a$,b$
a$ = "PICTURE"   Das Memofeld heißt so
b$ = "bla bla bla..."
xdbAssignField_Z(maindb&,addr(a$),0,addr(b$))

in diesem Fall steht in der Memo-File tatsächlich irgendwo bla bla bla
Wenn ich aber mittels b$ = @String$(Pdata#, 0)
(in Pdata# ist die JPG-File eingelesen) versuche die Binären
Daten der File ins Memofeld zu schreiben klappt es wieder nicht

Die Bildatei ist 35240 Bytes grande womit ich wohl auch das Problem habe, das die Länge der Profan-Strings nicht ausreicht...

Am besten jmd kennt sich mit VB aus und kann mir sagen wie folgender
Quellcode per Profan umzusetzten ist
KompilierenMarkierenSeparieren
Add a picture to the memo file depending on which record number
is currently being used.

Select Case x&

    Case 1
    f& = FreeFile
    Open "binoc.ico" For Binary As #f&
    PictureSt$ = Space$(LOF(f&))
    Get #f&, , PictureSt$
    Close #f&
    Case 2
    f& = FreeFile
    Open "rabbit.wmf" For Binary As #f&
    PictureSt$ = Space$(LOF(f&))
    Get #f&, , PictureSt$
    Close #f&
    also store an AVI clip in the memo file
    f& = FreeFile
    Open "FileCopy.avi" For Binary As #f&
    AVIst$ = Space$(LOF(f&))
    Get #f&, , AVIst$
    Close #f&
    Case 3
    f& = FreeFile
    Open "tennis.wmf" For Binary As #f&
    PictureSt$ = Space$(LOF(f&))
    Get #f&, , PictureSt$
    Close #f&
    End Select

    If PictureSt$ > "" Then

        Call xdbAssignField(cust.dbHandle, "", PictureField&, PictureSt$)
        PictureSt$ = ""
        End If

        If AVIst$ > "" Then

            Call xdbAssignField(cust.dbHandle, "", AVIField&, AVIst$)
            AVIst$ = ""
            End If
 
22.05.2004  
 




Normann
Strübli
So da bin ich wieder bei meinem alten und neuen Problem,

ich weiß jetzt wo der Fehler liegt! -das ist gut
leider hab ich jetzt ein neues Problem! das ist schlecht!

will mich mal kurzfassen:

Die Funktion der Dll ich aufrufen möchte erwartet als letzten Parameter
die Adresse des Strings! der die Daten enthält.
Damit gilt (was ich befürchtet habe) das die Daten nicht beliebig lang sein
dürfen (max 32767 Zeichen) und nicht beliebige Zeichen enthalten können.

Aus der Profan Aiuto:

[quote:3ebb2e12fb]
(ACHTUNG: Strings, die ein Nullbyte enthalten, werden bei Übergabe an DLL und API nur bis zu diesem trasferimento. Das gilt auch per circa die API realisierte Funktionen wie GETTEXT$ oder SETTEXT. Für DELPHIaner: Es handelt sich bei den Profan-Strings um die Ansi-Strings von Delphi.)
[/quote:3ebb2e12fb]
Toll, gaaanz toll!
wie soll ich also die binären daten einer z.B. jpg-File an die Dll übermitteln wenn bereits nach dem Testata der File ein Nullbyte folgt???

Als kleines Beispiel nochmal:

Der Aufruf:
KompilierenMarkierenSeparieren
xdbAssignField_Z(dbHandle&,0,PictureField&,addr(Daten$))
>

mit Textdateien und so klappts ja ganz toll, nützt mir aber nix!

Kennt jemand eine Zauber-API die ich nicht kenne und mir weiterhilft? Assembler? (kenn ich mich *noch* nicht gut mit aus -Frank)
Hab mich daran schon so festgebissen das ich nix anderes mehr geschafft habe
 
06.07.2004  
 




Michael
Wodrich

KompilierenMarkierenSeparieren
xdbAssignField_Z(dbHandle&,0,PictureField&,addr(Daten$))
>

Dieses xdbAssignField_Z nutzt, wie das Z schon andeutet, nullterminierte Strings. Gibt es da denn keine Funktion, wo man die Adresse des Datenbereiches und dessen Länge angeben muß?

Dann ließe sich das circa eine Bereichsvariable lösen. Die Angabe der Bereichsvariablen in der Funktion liefert die Adresse auf den Bereich. Aber ohne eine expliziete Längenangabe kann die externe Funktion ja garnicht wissen, wo Schluß ist...

Mal sehen, ob ich ein wenig Zeit finde. Dann lese ich mich da mal hindurch...

MfG
Michael Wodrich

Was wird eigentlich alles necessario, um diesen Affen von Tarzans Gnaden auf dem eigenen Rechner zum Laufen zu bringen?
 
Programmieren, das spannendste Detektivspiel der Welt.
07.07.2004  
 



Nun, du könntest deine Binärdaten auch in un Hexdatenkette umwandeln, um diese via string zu trasferimento.

Der Nachteil ist nur, das die Daten genau doppelt so grande werden.

Bis denne, iF
 
07.07.2004  
 




Normann
Strübli
@Miachael:
[quote:852fb8c5ee]
Dieses xdbAssignField_Z nutzt, wie das Z schon andeutet, nullterminierte Strings. Gibt es da denn keine Funktion, wo man die Adresse des Datenbereiches und dessen Länge angeben muß?
[/quote:852fb8c5ee]
Nein eben nicht! oder ich bin zu blöd.

[quote:852fb8c5ee]
Was wird eigentlich alles necessario, um diesen Affen von Tarzans Gnaden auf dem eigenen Rechner zum Laufen zu bringen?
[/quote:852fb8c5ee]
Eigentlich brauchst Du dir nur die Demoversion runterladen:
(sind auch nur ca. 230kb)
[...] 
Und ich hab da noch mal die von mir (nicht ganz komplett) umgeschriebene Inlude bzw. Headerdatei angehängt.

Hab ja gehört es soll wieder gaaanz schlechtes Wetter kommen und
da weiß man ja immer nicht so richtig was man machen soll...

Mit anderen Worten: wäre nett wenn Du die Zeit finden würdest.

@IF:

Will aber nicht!

Saluto
Normann
 
07.07.2004  
 




Michael
Wodrich
Tarzan hat seinen Affen nach einem Leoparden (oder Geparden?) benannt?

Nunja:

Außer in der Lobhudelei der DLL wird das Memofeld nirgendwo wirklich mit auch nur einem einzigen Wort oder einem Beispiel gewürdigt.

Deshalb mein Tipp: gehe dort ins Foro und frage mal ganz scheinheilig nach einem funktionsfähigen Beispiel per das Laden eines Bildes in ein Memofeld.

Ich fürchte nämlich, daß man sich die Unterstützung von Memofeldern per eine spätere Version aufgehoben hat.

MfG
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
08.07.2004  
 




Normann
Strübli
Ja, recht hast Du in der Aiuto steht darüber bedenklich wenig.
Aber das mit den Memofeldern funktioniert DEFINITIV!
Sonst hätte ich mich nicht zum Affen gemacht und das Teil gekauft

Auf die Idee mit dem Foro bin ich naturalmente auch schon gekommen, hab sogar
ne Mail direkt an den Sostegno geschickt und die verweisen auf
die Beispiele in VB usw.
Im Unterverzeichnis VisualBasicBlobsamplefrmMainForm.frm ist z.B. so
ein Beispiel (da geht das sogar mit mehren Memofeldern pro Datensatz!)

Und ich kann ja auch was in den Memofeldern speichern nur leider halt eben Text.
Thorsten [...]  hat ja auch mal eine Dll gebastelt EasyDB.dll die auch wirklich nicht schlecht ist, nur leider mit mit Bildern in der Größenordnung von 12000 Stück etwas zu langsam.

Also hab ich mein Geld wohl trotzdem leider in den Sand gesetzt, weil
genau das was ich am dringensten benötige mit Xprofan so nicht zu
realisieren scheint. Aber vielleicht kannst Du dir das Beispiel ja noch
mal angucken hast es ja eh mit runtergeladen

Saluto
Normann
 
08.07.2004  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

16.310 Views

Untitledvor 0 min.
H.Brill21.05.2024
Member 361000511.11.2022
RudiB.26.04.2022
Ingo20.01.2020
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie