Avatar billede -simit- Nybegynder
31. januar 2004 - 17:25 Der er 6 kommentarer og
1 løsning

lav en datasource

Jeg vil lave en datasource fra mit program så brugeren ikke skal til at lave en selv. Hvordan kan jeg gøre det?
Avatar billede arne_v Ekspert
31. januar 2004 - 17:33 #1
Hvorfor ikke bare lave en DSNless connection ?
Avatar billede -simit- Nybegynder
31. januar 2004 - 17:39 #2
fordi jeg ikke tror jeg har hørt om det.
Kan du fortælle mig om det eller henvise mig til et sted jeg kan læse om det?
Avatar billede arne_v Ekspert
31. januar 2004 - 17:45 #3
Jeg formoder at vi snakker ODBC.

Typisk laver man en DSN inde i ODBC Manager og så kan et program connecte til
den DSN.

Men man kan også lave en DSNless connection ved at angive driver og de
andre oplysninger som angive si DSN direkte i koden.
Avatar billede arne_v Ekspert
31. januar 2004 - 17:46 #4
Jeg lavede det her eksempel for ike så længe siden:

#include <stdio.h>
#include <stdlib.h>

#include <windows.h>
#include <sql.h>
#include <sqlext.h>

char* constr =  "Driver={Microsoft Access Driver (*.mdb)};Dbq=D:\\Database\\MSAccess\\Test.mdb;Uid=Admin;Pwd=;";
char* sqlstr = "SELECT * FROM T1";

int main(int argc, char *argv[])
{
  SQLHENV Environment;
  SQLHDBC DataBaseConnect;
  SQLHSTMT stmt;
  SQLRETURN stat;
  int i,il,sl,outconlen;
  char s[10],outconstr[1024];
  stat = SQLAllocEnv(&Environment);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in AllocEnv\n");
  stat = SQLAllocConnect(Environment,&DataBaseConnect);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in AllocConnect\n");
  stat = SQLDriverConnect(DataBaseConnect,NULL,
                    (SQLCHAR *)constr,(SQLSMALLINT)strlen(constr),
                    (SQLCHAR *)outconstr, (SQLSMALLINT)sizeof(outconstr),
                    (SQLSMALLINT *)&outconlen,SQL_DRIVER_COMPLETE);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in Connect\n");
  stat = SQLAllocStmt(DataBaseConnect,&stmt);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in AllocStmt\n");
  stat = SQLExecDirect(stmt,(SQLCHAR *)sqlstr,strlen(sqlstr));
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in ExecDirect\n");
  stat = SQLBindCol(stmt,1,SQL_C_LONG,&i,sizeof(i),(SQLINTEGER *)&il);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in BindCol\n");
  stat = SQLBindCol(stmt,2,SQL_C_CHAR,s,sizeof(s),(SQLINTEGER *)&sl);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) printf("Error in BindCol\n");
  for(;;) {
    stat = SQLFetch(stmt);
    if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) break;
    s[sl] = '\0';
    printf("%d %s\n",i,s);
  }
  SQLFreeStmt(stmt,SQL_DROP);
  SQLDisconnect(DataBaseConnect);
  SQLFreeConnect(DataBaseConnect);
  SQLFreeEnv(Environment); 
  return 0;
}
Avatar billede -simit- Nybegynder
31. januar 2004 - 17:53 #5
Hvis nu databasen ikke er lavet opstår der en fejl, hvordan vil du lave databasen i det tilfælde at den ikke existere?
Avatar billede arne_v Ekspert
31. januar 2004 - 18:11 #6
Godt spørgsmål. Man kan sikkert godt lave en database med ODBC kald. Men jeg
ved ikke hvordan.

Sjældent behov. Enten ligger databasen på netværket eller så installeres den af
installations programmet.
Avatar billede arne_v Ekspert
16. februar 2004 - 22:07 #7
OK ?
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