Seite 1 von 3

PB.Ex MSSQL (Windows)

Verfasst: 09.03.2018 23:29
von RSBasic
Hallo,

mit dieser Bibliothek ist es möglich, ohne ODBC auf MSSQL-Datenbanken zuzugreifen und SQL-Abfragen (z.B. Select, Insert Into, Update, Drop Table, ...) auszuführen.

Funktionen:
  • ExecuteSQLQuery()
    • Syntax:

      Code: Alles auswählen

      Result = ExecuteSQLQuery(ConnectionString$, SQL$, Timeout, @Output, @ErrorOutput)
    • Beschreibung: Führt eine SQL-Abfrage aus.
    • Parameter:
      1. ConnectionString$: Verbindungsdaten für den Server und für die Datenbank.
      2. SQL$: SQL-Code zum Ausführen einer Abfrage.
      3. Timeout: Zeit in Sekunden, wie lange maximal auf den Vorgang gewartet werden soll. Wenn 0 angegeben wurde, dann wird so lange gewartet, bis der Vorgang fertig ist.
      4. @Output: Das Ergebnis der Abfrage wird im XML-Format in die String-Variable gespeichert.
      5. @ErrorOutput: Falls ein Fehler auftritt, wird die Fehlermeldung in die String-Variable gespeichert.
    • Rückgabewert:
      • 1: Der Vorgang war erfolgreich.
    • Beispielcode:

      Code: Alles auswählen

      EnableExplicit
      
      Global PBEx_MSSQL
      
      CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
        PBEx_MSSQL = OpenLibrary(#PB_Any, "PB.Ex_MSSQL_x86.dll")
      CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64
        PBEx_MSSQL = OpenLibrary(#PB_Any, "PB.Ex_MSSQL_x64.dll")
      CompilerEndIf
      
      If PBEx_MSSQL
        Prototype ExecuteSQLQuery(ConnectionString.p-Unicode, SQL.p-Unicode, Timeout, Output, ErrorOutput)
        Global ExecuteSQLQuery.ExecuteSQLQuery = GetFunction(PBEx_MSSQL, "ExecuteSQLQuery")
        Prototype GetDatabaseBlobEx(ConnectionString.p-Unicode, Table.p-Unicode, Column.p-Unicode, Where.p-Unicode, Memory, MemoryLength, ErrorOutput)
        Global GetDatabaseBlobEx.GetDatabaseBlobEx = GetFunction(PBEx_MSSQL, "GetDatabaseBlobEx")
        Prototype SetDatabaseBlobEx(ConnectionString.p-Unicode, Table.p-Unicode, Column.p-Unicode, Where.p-Unicode, Memory, MemoryLength, ErrorOutput)
        Global SetDatabaseBlobEx.SetDatabaseBlobEx = GetFunction(PBEx_MSSQL, "SetDatabaseBlobEx")
        
        Define Output$ = Space(1000000)
        Define ErrorOutput$ = Space(1024)
        
        ;-Please change this
        Define Server$ = "YourServer"
        Define Database$ = "YourDatabase"
        Define User$ = "YourUsername"
        Define Password$ = "YourPassword"
        
        ;====================================================================================================
        
        ;-Get records from table
        If ExecuteSQLQuery("Server=" + Server$ + ";Database=" + Database$ + ";User Id=" + User$ + ";Password=" + Password$ + ";", "SELECT * FROM MyTable", 0, @Output$, @ErrorOutput$)
          ParseXML(1, Output$)
          FormatXML(1, #PB_XML_WindowsNewline | #PB_XML_ReFormat | #PB_XML_ReIndent)
          Debug ComposeXML(1)
        Else
          Debug "Error: " + ErrorOutput$
        EndIf
        
        ;====================================================================================================
        
        ;-Create new record in table
      ;   If ExecuteSQLQuery("Server=" + Server$ + ";Database=" + Database$ + ";User Id=" + User$ + ";Password=" + Password$ + ";", "INSERT INTO MyTable (Prename, Lastname, Age, IsEnabled) VALUES ('Max', 'Mustermann', 18, 1) ", 0, @Output$, @ErrorOutput$)
      ;     Debug "Successful"
      ;   Else
      ;     Debug "Error: " + ErrorOutput$
      ;   EndIf
        
        ;====================================================================================================
        
        ;-Import file to database
        ;1. Load the file into memory.
      ;   Define length
      ;   Define *MemoryID
      ;   Define bytes
      ;   If ReadFile(1, "YourImage.png")
      ;     length = Lof(1)
      ;     *MemoryID = AllocateMemory(length)
      ;     If *MemoryID
      ;       bytes = ReadData(1, *MemoryID, length) 
      ;     EndIf
      ;     CloseFile(1)
      ;   EndIf
      ;   
      ;   ;2. Send the memory to database.
      ;   If SetDatabaseBlobEx("Server=" + Server$ + ";Database=" + Database$ + ";User Id=" + User$ + ";Password=" + Password$ + ";", "MyTable", "BinText", "ID = 2", *MemoryID, bytes, @ErrorOutput$)
      ;     Debug "Successful"
      ;   Else
      ;     Debug "Error: " + ErrorOutput$
      ;   EndIf
        
        ;====================================================================================================
        
        ;-Export file from database
      ;   ;1. Determine the size of the file to be created.
      ;   Define FileLength
      ;   FileLength = GetDatabaseBlobEx("Server=" + Server$ + ";Database=" + Database$ + ";User Id=" + User$ + ";Password=" + Password$ + ";", "MyTable", "BinText", "ID = 2", 0, 0, @ErrorOutput$)
      ;   If FileLength = 0
      ;     Debug "Error: " + ErrorOutput$
      ;   EndIf
      ;   
      ;   ;2. Import and save file.
      ;   Define *MemoryID2 = AllocateMemory(FileLength)
      ;   If GetDatabaseBlobEx("Server=" + Server$ + ";Database=" + Database$ + ";User Id=" + User$ + ";Password=" + Password$ + ";", "MyTable", "BinText", "ID = 2", *MemoryID2, FileLength, @ErrorOutput$)
      ;     If CreateFile(1, "YourImageFromDB.png")
      ;       WriteData(1, *MemoryID2, FileLength)
      ;       CloseFile(1)
      ;     EndIf
      ;     Debug "Successful"
      ;   Else
      ;     Debug "Error: " + ErrorOutput$
      ;   EndIf
        
        
        
        CloseLibrary(PBEx_MSSQL)
      EndIf
      
    • GetDatabaseBlobEx()
      • Syntax:

        Code: Alles auswählen

        Result = GetDatabaseBlobEx(ConnectionString$, Table$, Column$, Where$, Memory, MemoryLength, @ErrorOutput)
      • Beschreibung: Exportiert eine Datei aus einer Tabellen-Spalte eines Record-Eintrages.
      • Parameter:
        1. ConnectionString$: Verbindungsdaten für den Server und für die Datenbank.
        2. Table$: Name der Tabelle.
        3. Column$: Name der Spalte.
        4. Where$: Bedingung, um einen eindeutigen Record-Eintrag zu finden.
        5. Memory: Ziel-Speicher für die exportierende Datei. Wenn 0, dann wird die Länge der Datei zurückgegeben.
        6. MemoryLength: Länge des Ziel-Speichers. Die Länge muss zuerst ermittelt werden.
        7. @ErrorOutput: Falls ein Fehler auftritt, wird die Fehlermeldung in die String-Variable gespeichert.
      • Rückgabewert:
        • 1: Der Vorgang war erfolgreich. Oder die Länge der Datei.
      • SetDatabaseBlobEx()
        • Syntax:

          Code: Alles auswählen

          Result = SetDatabaseBlobEx(ConnectionString$, Table$, Column$, Where$, Memory, MemoryLength, @ErrorOutput)
        • Beschreibung: Importiert eine Datei in eine Tabellen-Spalte eines Record-Eintrages.
        • Parameter:
          1. ConnectionString$: Verbindungsdaten für den Server und für die Datenbank.
          2. Table$: Name der Tabelle.
          3. Column$: Name der Spalte.
          4. Where$: Bedingung, um einen eindeutigen Record-Eintrag zu finden.
          5. Memory: Speicher einer geladenen Datei.
          6. MemoryLength: Länge des Speichers.
          7. @ErrorOutput: Falls ein Fehler auftritt, wird die Fehlermeldung in die String-Variable gespeichert.
        • Rückgabewert:
          • 1: Der Vorgang war erfolgreich.
      Systemvoraussetzungen:
      • .NET Framework 4.7.2 oder höher
      • Unicode-Aktivierung (standardmäßig ab PB 5.50)
      Es ist keine Assembly-Registrierung mit regasm.exe mit Administratorrechten notwendig wie bei COMatePLUS.

      Lizenz: Diese DLL-Datei ist kostenlos und darf sowohl privat als auch kommerziell verwendet werden.
      Folgende Copyright-Texte müssen mitgeliefert werden:
      Copyright © 2019 RSBasic.de
      Download: https://www.rsbasic.de/downloads/downlo ... _MSSQL.zip
      Bild

      Ich würde mich über Feedbacks, Verbesserungsvorschläge, Fehlermeldungen oder Wünsche sehr freuen. Wer mich unterstützen möchte, kann mir auch was kleines spenden. Danke :)

Re: PB.Ex MSSQL (Windows)

Verfasst: 10.03.2018 16:29
von Darky
Ist die DLL Etwa in .net ??? Wundert mich schon die ganze Zeit das man diese in PB verwenden kann :-| hat da jemand nähere infos für mich ?


( Sorry für den Offtopic :-D )

Re: PB.Ex MSSQL (Windows)

Verfasst: 10.03.2018 17:29
von RSBasic
Meine DLL habe ich in C# mit .NET geschrieben, ja.

Re: PB.Ex MSSQL (Windows)

Verfasst: 11.03.2018 09:48
von Rings
RSBasic hat geschrieben:Meine DLL habe ich in C# mit .NET geschrieben, ja.
jetzt wirds interessant.
Normalweise kann man mit c# ja keine 'standard DLLs' erstellen die man direkt
aus PB heraus aufrufen könnte.

Was hast du anders gemacht das die .NET assemblies aufgerufen werden können ?

Kennst du das hier:
http://www.purebasic.fr/english/viewtop ... 13&t=70308

oder hast du das womöglich weitergeführt mit Erfolg ?

Ich bin immerhin seit über 16 Jahren in der .NET Welt zuhause.........

Re: PB.Ex MSSQL (Windows)

Verfasst: 12.03.2018 00:30
von Darky
Interessiert mich auch mega.... das würde alle meine Projekte die ich für Kunden betreibe zurück zu Purebasic bringen :-) Da ich die Kernkomponenten in c# Schreiben könnte.

Gibt es Tutorials oder Beispiele wie man in c#DLLs für Purebasic realisiert :bounce: :bounce: :bounce: :bounce: ?

Re: PB.Ex MSSQL (Windows)

Verfasst: 12.03.2018 10:08
von RSBasic
Ich habe hier im Forum immer öfters gelesen, dass es angeblich nicht möglich sei, bis ich mal selber ausprobiert habe. Zuerst wollte ich einen Dreipunkt erzeugen (PB -> C++-DLL -> C#-DLL), aber dann stellte ich fest, dass es gar nicht notwendig ist. Man kann auch direkt in C# eine .NET-DLL erstellen, die man in PB nutzen kann.
Das Zauberwort lautet DLLExport. (Managed Code > Unmanaged Code)
Das wars schon. Warum ist noch niemand darauf gekommen?

Mit .NET hat man deutlich mehr Möglichkeiten und mein Ziel meiner PB.Ex-Bibliotheken ist es, Funktionen, die man wahrscheinlich in PB nie haben wird, bereitzustellen, damit man diese auch in PB nutzen kann. PB kann leider so viele Sachen nicht, die eigentlich im Jahr 2018 Standard sein sollte, wie z.B. SFTP, WMI o.ä.
Dann kann niemand (Nicht-PB-User) mehr sagen, dass PB nicht mit der Funktionalität einer anderen Sprache mithalten kann. :D

Meine DLLs werden zwar gedownloadet (Interesse besteht), aber ob es funktioniert oder ob es dem User gefällt, bekomme ich allerdings nicht. :D Ich würde mich über Feedbacks sehr freuen. Auch gern über Wünsche über zukünftige Funktionen.

Re: PB.Ex MSSQL (Windows)

Verfasst: 12.03.2018 12:27
von Rings
Danke für deine Informationen.

Re: PB.Ex MSSQL (Windows)

Verfasst: 12.03.2018 16:51
von Kiffi
Hi Ray,

erstmal vielen Dank für Deine DLL! :allright:

Bin heute erst dazu gekommen, zu testen.

Das Ergebnis ist allerdings falsch geschachtelt. Ich bekomme z.B. sowas hier:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-16"?>

<Records>
  <Record>
    [Daten]
    <Record>
      <Record>
        [Daten]
        <Record>
          <Record>
            [Daten]
            <Record/>
          </Record>
        </Record>
      </Record>
    </Record>
  </Record>
</Records>
Grüße ... Peter

Re: PB.Ex MSSQL (Windows)

Verfasst: 12.03.2018 18:15
von Mijikai
RSBasic hat geschrieben:...Ich würde mich über Feedbacks sehr freuen. Auch gern über Wünsche über zukünftige Funktionen.
Wäre es möglich eine *.lib beizulegen um das einbinden zu verbessern/vereinfachen?
(Ich meine keine statischen *.lib 's !!!)

Code: Alles auswählen

Import "PB.Ex_MSSQL_x64.lib"
  ExecuteSQLQuery(ConnectionString.s, SQL.s,Timeout.i,*Output,*ErrorOutput)
EndImport

Import "PB.Ex_Speech_x64.dll"
  TextToSpeaker(Text.s,Voice.s,Speed.i,Volume.i,Asynchronous.i,*ErrorOutput)
  TextToAudioFile(Text.s,Voice.s,Speed.i,Volume.i,SaveFilePath.s,*ErrorOutput)
  SpeechRecognition(WordArray.i,WordArraySize.i,*ErrorOutput)
  WaitSpeechRecognition(*RecognizedWord)
EndImport
Ist so schöner und komfortabler :)

Testen konnte ich leider keine der Bibliotheken (hab dafür keine Anwendung).
Sehr freundlich von dir die Bibliotheken bereitzustellen - danke :allright:

Re: PB.Ex MSSQL (Windows)

Verfasst: 12.03.2018 18:50
von Bisonte
Mijikai hat geschrieben:
RSBasic hat geschrieben:...Ich würde mich über Feedbacks sehr freuen. Auch gern über Wünsche über zukünftige Funktionen.
Wäre es möglich eine *.lib beizulegen um das einbinden zu verbessern/vereinfachen?
(Ich meine keine statischen *.lib 's !!!)

Code: Alles auswählen

Import "PB.Ex_MSSQL_x64.lib"
  ExecuteSQLQuery(ConnectionString.s, SQL.s,Timeout.i,*Output,*ErrorOutput)
EndImport

Import "PB.Ex_Speech_x64.dll"
  TextToSpeaker(Text.s,Voice.s,Speed.i,Volume.i,Asynchronous.i,*ErrorOutput)
  TextToAudioFile(Text.s,Voice.s,Speed.i,Volume.i,SaveFilePath.s,*ErrorOutput)
  SpeechRecognition(WordArray.i,WordArraySize.i,*ErrorOutput)
  WaitSpeechRecognition(*RecognizedWord)
EndImport
Ist so schöner und komfortabler :)

Testen konnte ich leider keine der Bibliotheken (hab dafür keine Anwendung).
Sehr freundlich von dir die Bibliotheken bereitzustellen - danke :allright:
Ja, die .lib Dateien zum importieren würde ich auch begrüssen.