Verwendung von SQLGetInfo

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
bommel
Beiträge: 32
Registriert: 31.07.2006 13:21

Beitrag von bommel »

Klar kann man die Datenbank aus so öffnen. Per OpenDatabaseRequester() kann man ja eine auswählen. Ich möchte den Datenbanknamen dann in einer config speichern, um beim nächsten Programmstart die entsprechene Datenbank automatisch zu öffnen. Wäre alles kein Problem, wenn es nur um DBs ginge, die schon auf dem Rechner sind. Die liste ich z.Z. einfach in einer ComboBox auf. Ich hätte aber auch gern die Möglichkeit, eine Datenbankvernüpfung zu erstellen (z.B. zu einer DB auf nem anderen Rechner) und diese Datenbank dann auch beim nächsten Aufruf zu nutzen. Nur liefert mir OpenDatabaseRequester ja nicht den Namen, sondern nur die Nummer zurück.

Gruß,
bommel
PB 4
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Du brauchst also ne Möglichkeit Dir die Vorhandenen ODBC-
Verknüpfungen anzuschauen

Im Windoof-Verzeichnis steht ne ODBC.ini die enthält spätestens
die seit dem letzten Systemstart schon vorhandenen ODBC-Verbindungen

Ansonsten kannst du die Registry an der relevanten Stelle auslesen.

Für User DSNs
"HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources"

Für System DSNs
"HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources"


zum Auslesen registry kannst das PBOSL-RegistryDings vom TS-Soft nehmen
http://www.purebasic.fr/german/viewtopi ... t=registry
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

oder damit .. finzte im Original im Codearchiv auf purearea.net

Code: Alles auswählen

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=1378&highlight=
; Author: Manne
; Date: 16. June 2003 (updated on 26. July 2003)


;----------------------------------------------------------------------------------------------------
Procedure.s ListSubValue(topKey.l, sKeyName.s, Index.l, ComputerName.s)
  GetHandle.l
  hKey.l
  dwIndex.l
  lpName.s
  lpcbName.l
  lpftLastWriteTime.FILETIME
  i.l
  lhRemoteRegistry.l
  lReturnCode.l
  ListSubValue.s
  
  If Left(sKeyName, 1) = "\"
    sKeyName = Right(sKeyName, Len(sKeyName) - 1)
  EndIf
  
  If ComputerName = ""
    GetHandle = RegOpenKeyEx_(topKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
  Else
    lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
    GetHandle = RegOpenKeyEx_(lhRemoteRegistry, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
  EndIf
  
  
  If GetHandle = #ERROR_SUCCESS
    lpcbName = 255
    lpName = Space(255)
    
    GetHandle = RegEnumValue_(hKey, Index, @lpName, @lpcbName, 0, 0, 0, 0)
    
    If GetHandle = #ERROR_SUCCESS
      ListSubValue = Left(lpName, lpcbName)
    Else
      ListSubValue = ""
    EndIf
    RegCloseKey_(hKey)
  EndIf
  ProcedureReturn ListSubValue
EndProcedure

;ergebnis.s = ListSubValue(sTopKey, sKeyName, 1, "")
;----------------------------------------------------------------------------------------------------

sTopKey.l = #HKEY_LOCAL_MACHINE
sKeyName.s = "\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources"

OpenConsole()

tmp.s=ListSubValue(sTopKey, sKeyName.s, 1,"")
While tmp
  i+1
  tmp.s=ListSubValue(sTopKey, sKeyName.s, i,"")
  If tmp<>""
    PrintN(tmp)
  EndIf
Wend
Input()
CloseConsole()

; ExecutableFormat=Windows
; FirstLine=1
; EOF
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
bommel
Beiträge: 32
Registriert: 31.07.2006 13:21

Beitrag von bommel »

Danke, aber die vorhanden Verknüpfungen kann ich mir ja auch mit PB direkt anschauen. Davon hab ich aber immer noch nicht den Namen der aktuell benutzten Datenbank.

Gruß,
bommel
PB 4
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Da Du die aktuell benutzte Datenbank ja irgendwann mal ausgesucht
und damit angeklickt haben musst um die ansprechend zu können
könntest Du Dir mal nen eigenen Requester coden der die vorhandenen
ODBC-Connects auswählbar anzeigt.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
bommel
Beiträge: 32
Registriert: 31.07.2006 13:21

Beitrag von bommel »

Ich hab nen eigenen Requester gecodet (eigentlich nur ne einfache Dropdown-Liste). Da kann man aber eben nur aus schon vorhandenen Verknüpfungen auswählen und nicht gleich eine neue hinzufügen.
PB 4
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

wenn du eine neue hinzufügen willst machst Du Dir
ne Reg-Datei und importierst die in die registry per
regedit dateiname mit parameter /s (silent)

die Position hast Du (im obigen Code steht die Position
der ODBC-Daten in der Registry)

Wichtig ist der Eintrag für die Connection selber und ein Eintrag in den ODC-Datasources

Leg Dir mal ne ODBC-Verknüpfung zu Fuss im ODBC-Manager an
und guck Dir das Ergebnis in der Registry an. studienhalber
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
bommel
Beiträge: 32
Registriert: 31.07.2006 13:21

Beitrag von bommel »

Gut und schön. Nur bin ich eigentlich nicht gewillt, einen kompletten eigenen Requester zu schreiben. Es gibt ja noch dazu Unmengen an ODBC-Treibern. Es soll ja auch nicht auf ACCESS-, MySQL-, MSSQL- oder sonst eine Datenbank beschränkt sein, sondern eben universell. Da ist der bestehende Requester schon recht gut. Zumal ich damit wohl etwas von meinem eigentlichen Projekt abkommen würde.

Gruß,
bommel
PB 4
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Etwas Arbeit um ne neue ODBC-Connection anzulegen wirst Du Dir schon
machen müssen.

Da die ODBC-connections weder in der Einrichtung noch in der
Konfiguration standardisiert sind, würde ich zur Einbindung entweder
den ODBC-Manager aus Windoof nehmen oder , insofern ich den
Konfigurationsaufbau kenne, ne reg-Datei erzeugen und einlesen (wie
oben schon angemerkt)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
bommel
Beiträge: 32
Registriert: 31.07.2006 13:21

Beitrag von bommel »

Ich will ja den ODBC-Manager von Windows nutzen. Aber der gibt, wie ich ja schon von Anfang an sage, nicht den Namen zurück. Jedenfalls nicht an die Purebasuc-Funktion. Genau davon rede ich doch die ganze Zeit.
Wie ich eine Datenbank anlege und einrichte weiß ich ja. Muß mir wohl ne DLL in C schreiben und die von PB aus aufrufen.
PB 4
Antworten