hier ein kleiner Code, um auf Connectionstrings mit PB zu erstellen oder
zu ändern. Vielleicht kann's ja jemand gebrauchen...
Connectionstrings benötigt man z.B., um via ADO auf ACCESS oder
SQL-Server-Datenbanken zuzugreifen.
Grüße ... Kiffi
Code: Alles auswählen
Enumeration
#frmMain
EndEnumeration
Enumeration
#txtConnectionString
#cmdEditConnectionString
EndEnumeration
Procedure.s x_Uni2Ansi(unicodestr.l)
; Original by aXend
lenA = WideCharToMultiByte_(#CP_ACP, 0, unicodestr, -1, 0, 0, 0, 0);
ansistr.s = Space(lenA)
If (lenA > 0)
WideCharToMultiByte_(#CP_ACP, 0, unicodestr, -1, @ansistr, lenA, 0, 0);
EndIf
ProcedureReturn ansistr
EndProcedure
Procedure.l x_Ansi2Uni(ansistr.s)
; Original by aXend
lenA.l = Len(ansistr)
lenW = MultiByteToWideChar_(#CP_ACP, 0, ansistr, lenA, 0, 0)
If (lenW > 0) ; Check whether conversion was successful
unicodestr = SysAllocStringLen_(0, lenW)
MultiByteToWideChar_(CP_ACP, 0, ansistr, lenA, unicodestr, lenW)
result = unicodestr
SysFreeString_(unicodestr)
ProcedureReturn result
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.s EditConnectionString(sConnString.s)
; Temp-Pfad ermitteln
sTempPath.s = Space(1024)
GetTempPath_(1024,sTempPath)
sUDLFile.s = sTempPath + "temp.udl"
; UDL-Datei erstellen
FF = CreateFile(#PB_Any, sUDLFile)
If FF
sConnString = "[oledb]" + #CRLF$ + "; Everything after this line is an OLE DB initstring" + #CRLF$ + sConnString + #CRLF$
WriteByte(255)
WriteByte(254)
WriteData(x_Ansi2Uni(sConnString), Len(sConnString)*2)
CloseFile(FF)
EndIf
; Dialog zum Editieren des UDL anzeigen
RunProgram(sUDLFile,"","", 1)
; Nun UDL öffnen und analysieren
FF = OpenFile(#PB_Any,sUDLFile)
If FF
; Der Inhalt der UDL-Datei liegt im Unicode-Format vor, welches PB (noch) nicht unterstützt
; Aus diesem Grund muss dieser in einfaches ANSI konvertiert werden
MemBuff = AllocateMemory(Lof())
ReadData(MemBuff, Lof())
sConnString.s = x_Uni2Ansi(MemBuff)
FreeMemory(MemBuff)
; Nun den relevanten Connectionstring herausfiltern
pos1 = FindString(sConnString, "Provider", 1)
If pos1
pos2 = FindString(sConnString, #CRLF$, pos1)
If pos2
sConnString = Mid(sConnString, pos1, pos2 - pos1)
Else
sConnString = ""
EndIf
Else
sConnString = ""
EndIf
CloseFile(FF)
Else
sConnString = ""
EndIf
ProcedureReturn sConnString
EndProcedure
If OpenWindow(#frmMain, 0, 0, 600, 30, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "ConnectionString-Builder")
If CreateGadgetList(WindowID(#frmMain))
StringGadget(#txtConnectionString,5,5,550,20,"",#PB_String_MultiLine)
ButtonGadget(#cmdEditConnectionString,560,5,35,20,"...")
EndIf
Repeat
EventID.l = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadgetID()
Case #cmdEditConnectionString
sDummy.s = EditConnectionString(GetGadgetText(#txtConnectionString))
If Len(sDummy) > 0
SetGadgetText(#txtConnectionString, sDummy)
EndIf
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
EndIf
End