PB.Ex MSSQL (Windows)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

PB.Ex MSSQL (Windows)

Beitrag 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 :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: PB.Ex MSSQL (Windows)

Beitrag 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 )
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PB.Ex MSSQL (Windows)

Beitrag von RSBasic »

Meine DLL habe ich in C# mit .NET geschrieben, ja.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Rings
Beiträge: 971
Registriert: 29.08.2004 08:48

Re: PB.Ex MSSQL (Windows)

Beitrag 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.........
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
Darky
Beiträge: 210
Registriert: 18.09.2004 20:53
Wohnort: Gelsenkirchen / NRW
Kontaktdaten:

Re: PB.Ex MSSQL (Windows)

Beitrag 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: ?
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PB.Ex MSSQL (Windows)

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Rings
Beiträge: 971
Registriert: 29.08.2004 08:48

Re: PB.Ex MSSQL (Windows)

Beitrag von Rings »

Danke für deine Informationen.
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PB.Ex MSSQL (Windows)

Beitrag 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
Hygge
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: PB.Ex MSSQL (Windows)

Beitrag 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:
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: PB.Ex MSSQL (Windows)

Beitrag 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.
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Antworten