Avatar billede tzr Nybegynder
15. september 2000 - 20:25 Der er 15 kommentarer og
1 løsning

ODBC via DSN

Hvordan får jeg mit vb5 program til at lave ændringer i en database via en dsn fil. Jeg vil gerne have konkrette vb-eksempler eller objekter jeg kan bruge til dette. Men uanset hvad, så skal jeg bruge en dsn-fil til dette.

Mvh.
TzR (kj_3@mailme.dk)
Avatar billede powell Nybegynder
18. september 2000 - 08:09 #1
Se hvad jeg fandt:

Connect Property Example: DSN Connection Using Establish Connection
The following example establishes an ODBC connection using a registered DSN to provide most of the required arguments. The User ID and Password are to be provided by domain-managed security. In this case the example prints the resulting Connect property to the Immediate window.

Dim cn As New rdoConnection
Dim qd As New rdoQuery

cn.Connect = \"uid=;pwd=;\"DSN=WorkDB;\"
cn.cursordriver = rdUseOdbc
cn.EstablishConnection rdDriverNoprompt
debug.print cn.Connect

Nemmere kan det da ikke være...
Avatar billede tzr Nybegynder
18. september 2000 - 14:57 #2
Den siger bare: \"User-Defined type not defined\". Og hvor står der dsn-filens navn henne ?
Har du ikke et lidt mere omfattende eksempel med nogle forklaringer ?
Avatar billede powell Nybegynder
18. september 2000 - 15:04 #3
How to profile driver performance data (ODBC)
To log driver performance data using ODBC Administrator

In Control Panel, double-click 32-bit ODBC.
Click the User DSN, System DSN, or File DSN tab.
Click the data source for which to log performance.
Click Configure.
Navigate the Microsoft SQL Server Configure DSN Wizard to the page with Log ODBC driver statistics to the log file.
Select Log ODBC driver statistics to the log file. In the box, place the name of the file where the statistics should be logged. Optionally, click Browse to browse the file system for the statistics log.
To log driver performance data programmatically

Call SQLSetConnectAttr with fOption set to SQL_COPT_SS_PERF_DATA_LOG and vParam set to the full path and file name of the performance data log file. For example:
\"C:\\\\Odbcperf.log\"

 

Call SQLSetConnectAttr with fOption set to SQL_COPT_SS_PERF_DATA and vParam set to SQL_PERF_START to start logging performance data.
Optionally, call SQLSetConnectAttr with fOption set to SQL_COPT_SS_LOG_NOW and vParam set to NULL to write a tab-delimited record of performance data to the performance data log file. This can be done multiple times as the application runs.
Call SQLSetConnectAttr with fOption set to SQL_COPT_SS_PERF_DATA and vParam set to SQL_PERF_STOP to stop logging performance data.
To pull driver performance data into an application

Call SQLSetConnectAttr with fOption set to SQL_COPT_SS_PERF_DATA and vParam set to SQL_PERF_START to start profiling performance data.
Call SQLGetConnectAttr with fOption set to SQL_COPT_SS_PERF_DATA and pvParam set to the address of a pointer to a SQLPERF structure. The first such call sets the pointer to the address of a valid SQLPERF structure that contains current performance data. The driver does not continually refresh the data in the performance structure. The application must repeat the call to SQLGetConnectAttr anytime it needs to refresh the structure with more current performance data.
Call SQLSetConnectAttr with fOption set to SQL_COPT_SS_PERF_DATA and vParam set to SQL_PERF_STOP to stop logging performance data.
The SQLPERF structure is defined in Odbcss.h as follows:

typedef struct sqlperf

{

    // Application profile statistics

    DWORD TimerResolution;

    DWORD SQLidu;

    DWORD SQLiduRows;

    DWORD SQLSelects;

    DWORD SQLSelectRows;

    DWORD Transactions;

    DWORD SQLPrepares;

    DWORD ExecDirects;

    DWORD SQLExecutes;

    DWORD CursorOpens;

    DWORD CursorSize;

    DWORD CursorUsed;

    LDOUBLE PercentCursorUsed;

    LDOUBLE AvgFetchTime;

    LDOUBLE AvgCursorSize;

    LDOUBLE AvgCursorUsed;

    DWORD SQLFetchTime;

    DWORD SQLFetchCount;

    DWORD CurrentStmtCount;

    DWORD MaxOpenStmt;

    DWORD SumOpenStmt;

   

    // Connection statistics

    DWORD CurrentConnectionCount;

    DWORD MaxConnectionsOpened;

    DWORD SumConnectionsOpened;

    DWORD SumConnectionTime;

    LDOUBLE AvgTimeOpened;

 

    // Network statistics

    DWORD ServerRndTrips;

    DWORD BuffersSent;

    DWORD BuffersRec;

    DWORD BytesSent;

    DWORD BytesRec;

 

    // Time statistics

    DWORD msExecutionTime;

    DWORD msNetworkServerTime;

 

}    SQLPERF;

 

Examples
This example shows both the creation of a performance data log file and displaying performance data directly from the SQLPERF data structure. Error-checking code was removed to simplify this example.

// Sample showing the SQL Server ODBC driver-specific options

// to record performance statistics.  The sample creates

// one file:

//

// C:\\Odbcperf.log contains performance statistics and

// can be imported to a spreadsheet program such as Microsoft Excel

// as a tab-delimited file for analysis.

 

#include <stdio.h>

#include <string.h>

#include <windows.h>

#include <sql.h>

#include <sqlext.h>

#include <odbcss.h>

 

SQLHENV        henv = SQL_NULL_HENV;

SQLHDBC        hdbc1 = SQL_NULL_HDBC;   

SQLHSTMT        hstmt1 = SQL_NULL_HSTMT;

 

int main() {

    RETCODE retcode;

    // Pointer to the ODBC driver performance structure.

    SQLPERF        *PerfPtr;

    SQLINTEGER    cbPerfPtr;

   

    // Allocate the ODBC environment and save handle.

    retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);

    // Let ODBC know this is an ODBC 3.0 app.

    retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,

                            (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);

    // Allocate ODBC connection handle and connect.

    retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);

    retcode = SQLConnect(hdbc1, \"MyDSN\", SQL_NTS,

                        \"sa\", SQL_NTS, \"MyPassWord\", SQL_NTS);

 

    // Set options to log performance statistics.

    // Specify file to use for the log.

    retcode = SQLSetConnectAttr

                            (hdbc1,

                            SQL_COPT_SS_PERF_DATA_LOG,

                            &\"c:\\\\odbcperf.log\",

                            SQL_NTS);

    // Start the performance statistics log.

    retcode = SQLSetConnectAttr

                            (hdbc1,

                            SQL_COPT_SS_PERF_DATA,

                            (SQLPOINTER)SQL_PERF_START,

                            SQL_IS_UINTEGER);

 

    // Allocate statement handle, then execute command.

    retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);

    retcode = SQLExecDirect(hstmt1,

            \"SELECT * FROM pubs.dbo.authors\", SQL_NTS);

    // Clear any result sets generated.

    while ( ( retcode = SQLMoreResults(hstmt1) ) != SQL_NO_DATA )

        ;

 

    retcode = SQLExecDirect(hstmt1,

            \"SELECT * FROM pubs.dbo.stores\", SQL_NTS);

    // Clear any result sets generated.

    while ( ( retcode = SQLMoreResults(hstmt1) ) != SQL_NO_DATA )

        ;

 

    // Generate a long-running query.

    retcode = SQLExecDirect(hstmt1,

                            \"waitfor delay \'00:00:04\' \", SQL_NTS);

    // Clear any result sets generated.

    while ( ( retcode = SQLMoreResults(hstmt1) ) != SQL_NO_DATA )

        ;

 

    // Write current statistics to the performance log.

    retcode = SQLSetConnectAttr

                            (hdbc1,

                            SQL_COPT_SS_PERF_DATA_LOG_NOW,

                            (SQLPOINTER)NULL,

                            SQL_IS_UINTEGER);

 

    // Get pointer to current SQLPerf structure.

    // Print a couple of statistics.

    retcode = SQLGetConnectAttr

                            (hdbc1,

                            SQL_COPT_SS_PERF_DATA,

                            (SQLPOINTER)&PerfPtr,

                            SQL_IS_POINTER,

                            &cbPerfPtr);

    printf(\"SQLSelects = %d, SQLSelectRows = %d\\n\",

                PerfPtr->SQLSelects, PerfPtr->SQLSelectRows);

 

    /* Clean up. */

    SQLFreeHandle(SQL_HANDLE_STMT, hstmt1);

    SQLDisconnect(hdbc1);

    SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);

    SQLFreeHandle(SQL_HANDLE_ENV, henv);

    return(0);

}

Avatar billede powell Nybegynder
18. september 2000 - 15:06 #4
Avatar billede tzr Nybegynder
18. september 2000 - 15:10 #5
hmmmm...det må jeg jo så prøve
Avatar billede tzr Nybegynder
18. september 2000 - 15:11 #6
Det er sq da ikke vb det der !!
Avatar billede powell Nybegynder
18. september 2000 - 15:14 #7
Damm det har du ret i, kom til at kopiere det fra C/C++ manualen. Men på den addy jeg gav, kan du søge efter det og finde det til VB. metoderne er de samme.
Avatar billede janmanden Nybegynder
19. september 2000 - 00:08 #8
Hvis ADO fungerer med VB5 kan du vælge at opdatere din database med connection eller via recordset.

1A.Opsætning af dsn: Control Panel->Odbc->System DSN->Add, lokaliser din database og giv forbindelsen et dsn navn, spring alle andre indstillinger over.

1B. (Access Database)
eller udskift nedenstående Conn med dette:

strDSN = \"Provider=MSDASQL;\" & _
\"Driver={Microsoft Access Driver (*.mdb)};\" &; _
\"DBQ=...Stien til din database\"
Conn.Open strDSN

2.VB Code (VB5/VB6)

Option Explicit
Dim Conn As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim strConn as String

strConn = \"din dsn\"
Conn.Open strConn \' eller strDSN

strQUERY1 = \"UPDATE #1 SET #2=#3 WHERE #4=#5\"
\'#1 = Tabel, #2 = kollonnenavn, #3 = værdi,
\'#4 kollonnenavn, #5 = værdi.

\'Så kan du bruge conn til at opdatere med hvis du
\'ikke skal bruge værdier efterfølgende.

Conn.Execute(strQUERY)

\'Eller recordset
strQUERY2 = \"SELECT * FROM #1 WHERE #4=#5\"
RS.Open strQUERY2, Conn, 1 , 3
RS(\"#2\") = #3
RS.Update

PS. #? skal selvfølgelig udskiftes med nogle sigende værdier og husk at sætte \' omkring \'tekstværdier\'.
Avatar billede janmanden Nybegynder
19. september 2000 - 00:10 #9
PSS. Du skal lige huske at tilføje en reference i dit projekt til \"Microsoft ActiveX Data Object Library\" hvis du vil bruge ADO(DB), ellers får du en userdefined error.
Avatar billede tzr Nybegynder
20. september 2000 - 10:51 #10
Jeg skal have vb-programmet til at bruge en .dsn fil til at åbne en database, og derved bruge de drivere der er specificeret i denne. Grunden til det er at, ham jeg skal lave programmet for vil bruge en mySQL database til at opbevare oplysningerne i. Og efter som jeg IKKE har mySQL, og ikke ved hvordan man bruger det, ville jeg teste programmet i en Acces database... Men det færdige program skal helst kunne acceptere enhver ODBC database, bare der er en .dsn fil der fortæller hvor den er, og hvilke drivere der skal bruges. Det må man da kunne gøre i vb5 ?
Avatar billede powell Nybegynder
20. september 2000 - 10:58 #11
Mit eksembel til at starte med, siger jo nettop at det kan lade sig gøre...

Spørgsmålet i den rutine: er blot hvem kalder hvad og hvornår kaldes hvem?

Måske kan du finde et svar her:
http://www.eksperten.dk/list.phtml?find=dsn&catid=96
Avatar billede janmanden Nybegynder
20. september 2000 - 22:21 #12
Du vil altså nærmest lave et API til enhver database i din VB applikation ? - med udgangspunkt i Access ??

God fornøjelse,...ærligt talt det kan vel ikke bare være et spørgsmål om at kunne få forbindelse til en vilkårlig database men også at udnytte den optimalt. Der er altså, trods ligheder, forskelligheder i funktionalitet og ydeevne at tænke på også.

Ham du skal lave det for ville jo nok foretrække at det du laver for ham fungerer optimalt til mySQL. Hvis han har brug for noget andet kan det jo være han kommer igen, hvis det du lavede fungerede tilfredsstillende.

Bemærk RDO er også Microsoft ligesom ADO (og VB).

Men hvis du gerne vil køre videre med ideen ville det være bedre om du lavede en komponent (DLL) for hver db-type som du kunne refere til i din applikation, men så skal du lige huske at lave et setup program til din ven...
Avatar billede tzr Nybegynder
20. september 2000 - 22:47 #13
Den behøver ikke kunne gøre alt hvad de forskellige databasetyper kan, bare ændre i værdierne og tilfæje rækker... det er alt
Avatar billede janmanden Nybegynder
21. september 2000 - 00:41 #14
Nåh,...hm.

Skal det du laver laves som en komponent (dll) og afvikles fra asp under IIS eller skal det køre fra en eller anden anden dødsyg linuxsnot php server ?
Avatar billede tzr Nybegynder
21. september 2000 - 14:13 #15
Programmet skal til slut køre med mySQL database, som nok bliver afviklet sammen med noget php... servertypen aner jeg ikke noget om, men programmet skal bare have fat i ODBC\'ens dsn-fil, så skulle den klare resten
Avatar billede tzr Nybegynder
11. november 2000 - 11:00 #16
Jeg lukker spørgsmålet da ingen kan komme med et acceptabelt svar
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Politiets Efterretningstjeneste

GenAI Specialist i PET

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger IT-supporterelever til Lokal IT på Aalborg Kaserne
Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel