'============================================================ ' Projekt : SQL-Abfragensteuerung mit Hilfe einer INI-Datei ' Modulname : SQL.BAS ' Aufgabe : Globale Deklarationen und Routinen ' Copyright : Arthur Burda; Steingräber Fachverlag ' Compiler : Visual Basic 3.0 für Windows '============================================================ ' l. Änderung am : 22.09.1994 ' Version : 1.00 ' Bemerkungen : Erste Implementierung '------------------------------------------------------------ Option Explicit '------------------------------------------------------------ ' globale Konstanten '------------------------------------------------------------ Global Const glb_DB_Name = "CITIES.MDB" ' Name der Datenbank-Datei '------------------------------------------------------------ ' globale Variablen '------------------------------------------------------------ Global glb_SQL_INI_Name$ ' Name der SQL-INI-Datei '------------------------------------------------------------ ' Deklaration der API-Funktionen '------------------------------------------------------------ Declare Function WritePrivateProfileString% Lib "Kernel" (ByVal lpAppName$, ByVal lpKeyName$, ByVal lpString$, ByVal lpFileName$) Declare Function GetPrivateProfileString Lib "Kernel" (ByVal lpAppName$, ByVal lpKeyName$, ByVal lpDefault$, ByVal lpRetString$, ByVal nSize%, ByVal lpFileName$) As Integer '============================================================ ' Routine : Get_INI_String '============================================================ ' Aufgabe : Liefert einen String aus dem angegebenen Bereich ' und dem angegebenen Eintrag in einer INI-Datei. ' Eingabe : Section = Bereich ' Item = Eintrag ' Default = Standard-String ' File_Name = Name der INI-Datei ' Ausgabe : keine ' Return : Parameter vom Typ String '------------------------------------------------------------ ' Function Get_INI_String (Section$, Item$, Default$, File_Name$) As String Const Buf_Size = 2048 ' max. Anzahl Zeichen im Puffer Dim Buffer$ ' Puffer für den INI-String Dim Copy_Bytes% ' Anzahl der in den Puffer kopierten Zeichen Get_INI_String = Default$ If File_Name$ <> "" Then Buffer$ = String$(Buf_Size, 32) ' Puffer mit Leerzeichen füllen Copy_Bytes% = GetPrivateProfileString(Section$, Item$, Default$, Buffer$, Len(Buffer$), File_Name$) ' INI-String auslesen If Copy_Bytes% > 0 Then Get_INI_String = Mid$(Buffer$, 1, Copy_Bytes%) ' Leerzeichen löschen End If End Function '============================================================ ' Routine : Get_SQL_Text '============================================================ ' Aufgabe : Liefert den aus einzelnen Einträgen in der angege- ' benen Section der SQL-INI-Datei zusammengesetzten ' SQL-Text. ' Eingabe : Section = Bereich ' Ausgabe : keine ' Return : SQL-Text '------------------------------------------------------------ ' Function Get_SQL_Text (Section$) As String Dim SQL_Text$ Dim Count%, i Dim Continue Dim Item$ Static Param$(50) ' max. 50 Parameter pro SQL-Text in der SQL-INI-Datei SQL_Text$ = "" ' Parameter-Array initialisieren For i = 1 To 50 Param$(i) = "" Next i Continue = True Count% = 1 ' SQL-Text aus einzelnen Parametern zusammenfügen While Continue Item$ = Get_INI_String(Section$, Str$(Count%), "", glb_SQL_INI_Name) If Item$ = "" Or Count% = 50 Then Continue = False If Item$ <> "" Then SQL_Text$ = SQL_Text & " " & Item$ End If Count% = Count% + 1 Wend ' SQL-Text zurückliefern Get_SQL_Text = SQL_Text$ End Function '============================================================ ' Routine : Main '============================================================ ' Aufgabe : Hauptroutine des Programms, die die SQL-Abfragen- ' steuerung mittels einer INI-Datei demonstriert. ' Eingabe : keine ' Ausgabe : keine '------------------------------------------------------------ ' Sub Main () Dim DB As Database Dim Snap As Snapshot Dim SQL_Text$ ChDir App.Path glb_SQL_INI_Name$ = CurDir$ & "\SQL.INI" SQL_Text$ = Get_SQL_Text("Städte in Europa") ' SQL-Text aus INI-Datei lesen If SQL_Text$ <> "" Then MsgBox "SQL-Abfrage: Städte in Europa" & Chr$(13) & Chr$(13) & "SQL-Text:" & Chr$(13) & Chr$(13) & SQL_Text$ ' Datenbank öffnen und SQL-Abfrage als Snapshot erstellen Set DB = OpenDatabase(glb_DB_Name) Set Snap = DB.CreateSnapshot(SQL_Text$) ' Datensätze nacheinander anzeigen If Snap.RecordCount > 0 Then While Not Snap.EOF MsgBox "Stadt-ID: " & Snap("City_ID") & Chr$(13) & "Stadt: " & Snap("City") & Chr$(13) & "Land: " & Snap("Country") & Chr$(13) & "Kontinent: " & Snap("Continent") Snap.MoveNext Wend End If ' Snapshot und Datenbank schließen Snap.Close DB.Close Else MsgBox "Kein SQL-Text für die Erstellung einer Abfrage vorhanden" End If End Sub