Avatar billede frankeman Nybegynder
02. maj 2000 - 13:14 Der er 2 kommentarer og
1 løsning

embedded sql med access97

Hvordan benytter man embedded sql i c til at få fat i en access database, uden at man skal konvertere til sql server ?

Og hvilken prækompiler skal man bruge dertil, hvis en sådan er nødvendig ?

Links eller programeksempler har interesse.
Avatar billede tuxen Nybegynder
23. august 2000 - 16:18 #1
Istedet for at embedde det direkte in di hvilket er temmelig hårdt, så brug et visuelt værktøj som builder.
For at det kan virke skal du selv sætte dsn (data source name) op i ODBC, men ellers skulle komponenten sørge for at hjælpe dig med resten.
Avatar billede tuxen Nybegynder
23. august 2000 - 16:23 #2
Har kigget i mine gemmer og har et eksempel på engang hvor jeg skulle embedde sql til at køre mod Oracle.
Brugte g++ compiler.
Brudstykke af eks.:
#include <iostream.h>
#include <stdio.h>
#include <string.h>

EXEC SQL BEGIN DECLARE SECTION;
  VARCHAR uid[7];
  struct StudStr {
      VARCHAR userid[7];
      char hjemmefra[6];
      VARCHAR navn[81];
    } Studerende;
EXEC SQL END DECLARE SECTION;

EXEC SQL INCLUDE SQLCA.H;

class Exceptions {
  private:
    char theMessage[80];
  public:
    Exceptions();
    Exceptions(char *);
    friend ostream &operator << (ostream &, Exceptions &);
  };
 
void err() {
  throw Exceptions(sqlca.sqlerrm.sqlerrmc);
  }

class Databases {
  private:
    EXEC SQL BEGIN DECLARE SECTION;
      VARCHAR db_userid[40];
      VARCHAR db_password[40];
    EXEC SQL END DECLARE SECTION;
  public:
    Databases(char *, char *);
    ~Databases();
  };

void main() {
  Databases *db;
  try {
    db = new Databases(\"anders\", \"anders\");

    cout << \"Indtast brugerid: \";
    cin >> (char *)uid.arr;
    cout << endl;

    uid.len = strlen((char *)uid.arr);

    EXEC SQL WHENEVER SQLERROR DO err();
    EXEC SQL
      SELECT USERID, HJEMMEFRA, NAVN
      INTO :Studerende
      FROM STUDERENDE
      WHERE USERID = :uid ;

    Studerende.navn.arr[Studerende.navn.len] = \'\\0\';
    Studerende.hjemmefra[5] = \'\\0\';

    cout << \"Brugeren med userid: \" << (char *)uid.arr << \" hedder \";
    cout << (char *)Studerende.navn.arr << \" og tager hjemmefra kl: \";
    cout << Studerende.hjemmefra << endl;

    delete db;
    }

  catch (Exceptions E) {
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    cout << E;
    EXEC SQL ROLLBACK RELEASE;
    }
  }

// Methods for Databases

Databases::Databases(char *uid, char *pwd) {
  db_userid.len = strlen(strcpy((char *)db_userid.arr, uid));
  db_password.len = strlen(strcpy((char *)db_password.arr, pwd));
  EXEC SQL WHENEVER SQLERROR DO err();
  EXEC SQL CONNECT :db_userid IDENTIFIED BY :db_password;
  }

Databases::~Databases() {
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL COMMIT WORK RELEASE;
  }

Exceptions::Exceptions() {
  strcpy(theMessage, \"Undefined exception\");
  }

Exceptions::Exceptions(char *m) { strcpy(theMessage, m); }

ostream &operator << (ostream &o, Exceptions &E) {
  o << E.theMessage;
  return o;
  }
Avatar billede tuxen Nybegynder
23. august 2000 - 16:39 #3
Som du nok har bemærket er det i headerren:
EXEC SQL INCLUDE SQLCA.H;
At der sker noget skægt, men den kan jeg ikke finde ! ....
Jeg har nogle stumper fra main - makefilen, men den har jeg ikke selv lavet så derfor er jeg ikke så skarp til at forklare den, som det andet.
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