Avatar billede baltazar_ Nybegynder
12. august 2003 - 00:43 Der er 10 kommentarer

hvordan henter man data fra access database fra webserver ?

Er der nogle der kan forklare lidt om dette, eller har et simpelt eksempel jeg kan se på.

Jeg er ny inden for dette område i m.. visual c++
Avatar billede arne_v Ekspert
12. august 2003 - 07:53 #1
Skal du lave:

C++ client <----> IIS <----> ASP side <----> Access database

eller skal du lave:

browser <----> IIS <----> C++ ISAPI modul <----> Access database

?

Stor forskel !

Med det første skal du åbne en socket til port 80 på serveren og
send en HTTP request hvilket grundliggende er "GET /noget HTTP/1.0\r\n\r\n"
og læse svaret.

Jeg kan godt komme med et mere komplet eksempel.

For det andet skal du lave et ISAPI modul. Det kræver nok lidt mere.
Avatar billede arne_v Ekspert
12. august 2003 - 07:57 #2
På Win32 har du udover muligheden af at bruge winsock direkte også
muligheden af at bruge wininet interfacet.
Avatar billede baltazar_ Nybegynder
12. august 2003 - 14:57 #3
et komplet eksempel ville være lækkert at studere nærmere,
med hensyn til adgangs vejen så er det en direkte connection til access databasen jeg er ude efter, og den skal så hente forespørgelsen ned i en html fil / asp
så denne er vist løsningen i mit tilfælde, men som sagt er det kun for at lære noget, så et hvilkent som helst eksempel er ok med mig.

C++ client <----> IIS <----> ASP side <----> Access database
Avatar billede arne_v Ekspert
12. august 2003 - 15:24 #4
Nu er det lykkes dig totalt at forvirre mig.

Først snakker du om et program der kan læse fra en Access database og
så returnerer HTML.

Og så viser du modellen hvor programmet henter HTML over HTTP.

Det er to meget forskellige ting.

Jeg kan godt lave begge, men det var rart at vide
hvad for en du skulle bruge.
Avatar billede baltazar_ Nybegynder
12. august 2003 - 19:42 #5
det må være varmen,

jeg vil sådan set bare have et lille program der kan udføre en forespørgelse til en access database direkte, og visse resultatet, (en gang i timen, eller ved en UPDATE knap eller noget i den stil )

hvis du vil vise mig hvorledes med denne model

C++ client <----> IIS <----> ASP side <----> Access database

til at starte med, så har jeg nok nogle gode ? til dig når jeg har studeret det.
Avatar billede baltazar_ Nybegynder
12. august 2003 - 19:43 #6
håber ikke du blev mere rundt på gulvet end jeg havde gjort dig i forvejen
Avatar billede arne_v Ekspert
12. august 2003 - 23:13 #7
Avatar billede baltazar_ Nybegynder
13. august 2003 - 14:29 #8
findes der evt. en dialog udgave. hvor den connecter til en access database

har du et sådan eksempel også.
Avatar billede arne_v Ekspert
13. august 2003 - 14:46 #9
Der er rigtigt rigtigt mange måder at accesse en Access database på
fra C++.

DAO, ADO, OLE DB, ODBC etc..

Her er et eksempel med ODBC:

#include <iostream>

using namespace std;

#include <stdlib.h>

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

char* dsn = "TestMSAccess";
char* un = "";
char* pw = "";
char* sqlstr = "SELECT * FROM T1";

int main(int argc, char *argv[])
{
  SQLHENV Environment;
  SQLHDBC DataBaseConnect;
  SQLHSTMT stmt;
  SQLRETURN stat;
  stat = SQLAllocEnv(&Environment);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in AllocEnv" << endl;
  stat = SQLAllocConnect(Environment,&DataBaseConnect);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in AllocConnect" << endl;
  stat = SQLConnect(DataBaseConnect,
                    (SQLCHAR *)dsn,strlen(dsn),
                    (SQLCHAR *)un,strlen(un),
                    (SQLCHAR *)pw,strlen(pw));
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in Connect" << endl;
  stat = SQLAllocStmt(DataBaseConnect,&stmt);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in AllocStmt" << endl;
  stat = SQLExecDirect(stmt,(SQLCHAR *)sqlstr,strlen(sqlstr));
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in ExecDirect" << endl;
  int i,il,sl;
  char s[10];
  stat = SQLBindCol(stmt,1,SQL_C_LONG,&i,sizeof(i),(SQLINTEGER *)&il);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in BindCol" << endl;
  stat = SQLBindCol(stmt,2,SQL_C_CHAR,s,sizeof(s),(SQLINTEGER *)&sl);
  if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in BindCol" << endl;
  for(;;) {
    stat = SQLFetch(stmt);
    if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) break;
    s[sl] = '\0';
    cout << i << " " << s << endl;
  }
  SQLFreeStmt(stmt,SQL_DROP);
  SQLDisconnect(DataBaseConnect);
  SQLFreeConnect(DataBaseConnect);
  SQLFreeEnv(Environment); 
  system("PAUSE");   
  return 0;
}
Avatar billede arne_v Ekspert
10. september 2003 - 22:20 #10
Tid at lukke spørgsmålet ?
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





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis