29. juni 2001 - 13:43Der er
8 kommentarer og 1 løsning
ODBC og ACCESS
Jeg har to Oracel databaser der er helt ens i opbygning (har altså ens tabeller men ikke ens data) Jeg har oprettet to ODBC forbindelser en til hver database. Med en disse har med ACCESS udformet nogle rapporter som jeg også skal have vist for den anden database. Kan man ikke lave en lille knap man kan trykke på for at skifte ODBC forbindelse, altså er det muligt at linke til en anden database. Jeg er godt klar over at jeg bare ku gå ind og redigere i min ODBC forbindelse men det bliver nok lidt for teknisk for dem der skal benytte ACCESS rapporterne.
200 P til den der kommer med en rigtig sej løsning og et stort cybersmil
Public Declare Function ShellExecute Lib \"shell32.dll\" Alias \"ShellExecuteA\" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Const SW_HIDE = 0 Public Const SW_SHOW = 5
Then in a form the following... Dim result As Integer Dim stAppPath As String Dim stAppName As String
Dim tdef As TableDef Dim db As Database
stAppPath = \"C:\\\"
If ... Then ... stAppName = \"Reg1.REG\" else stAppName = \"Reg2.REG\" endif
result = ShellExecute(0, \"Open\", stAppPath & stAppName, stAppPath, \"\", SW_SHOW)
Set db = CurrentDb Set tdef = db.TableDefs(\"tblYourTable\") tdef.RefreshLink
The reg files should lokk something like this
REGEDIT4
[HKEY_LOCAL_MACHINE\\SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources] \"Building Maintenance\"=\"SQL Server\"
These can be found in the registry key HKEY_LOCAL_MACHINE or HKEY_CURRRENT_USER depending on whether or not its a user or system data source.
You obviously need to alter the If then .. to suit your application in could maybe be a radio button group where you select one or the other database. In both reg files the information is exactly the same, appart from the Databasename and/or Server. It would maybe also be an idea to ensure that you link to the same database each time the application starts, and set the radio buttons accordingly. Get the idea??
Følgende kode erstatter connectstring for både tabeller og forespørgsler (hvis du har videregivelsesforespørgsler!). Koden lægges evt i et Modul.
Proceduren benytter DAO-teknik, så hvis du bruger Access 2000/XP skal du lave en reference til \"Microsoft DAO 3.6 Object Library\"
Public Sub SkiftAttachment(ConStr As String) Dim tdef As TableDef, qdef As QueryDef Dim TblName As String Dim db As Database Set db = CurrentDb For Each tdef In db.TableDefs \'<<----Hvis tabellen er tilknyttet---->> If Left(tdef.Connect, 5) = \"ODBC;\" Then TblName = tdef.Name tdef.Connect = ConStr tdef.RefreshLink End If Next tdef For Each qdef In db.QueryDefs If qdef.Connect <> \"\" Then qdef.Connect = ConStr End If Next qdef End Sub
Herefter kan koden kaldes med de 2 forskellige connectstrings. Eks: SkiftAttachment \"ODBC;DRIVER=SQL Server;SERVER=(local);UID=sa;PWD=tja;DATABASE=MinDatabase\"
Ovenstående eksempel er godt nok til en SQL server, men hvis du har connectstring\'en til Oracle, så er det bare at erstatte den.
Du kan rent kodemæssigt vælge ODBC forbindelse. Her er et eksempel hvor jeg forbinder til en odbc som jeg kalder tmatest:
Dim wrkODBC As Workspace, conPubs As Connection Set wrkODBC = CreateWorkspace(\"NewODBCWorkspace\", \"admin\", \"\", dbUseODBC) Set conPubs = wrkODBC.OpenConnection(\"tmatest\", dbDriverNoPrompt, False, \"ODBC;UID=nn;PWD=nn;DSN = tmatest;\")
conPubs.Execute \"delete from promis.ep_items where orderno = \'61477\'\" MsgBox \"Antal slettet \" & conPubs.RecordsAffected
conPubs.Close wrkODBC.Close Set conPubs = Nothing Set wrkODBC = Nothing
Du kunne så blot i koden vælge hvilken af de to du skal benytte (du skal selvfølgelig oprette de to)
Hej Alle Tak for de mange svar jeg vender tilbage med pointfordelingen når jeg har valgt en af løsningerne...
:o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.