记录生活点滴感悟,畅想思维大彻大悟!欢迎来到一个难辨的世界
[置顶] 难得糊涂
//////////////////////////////////////////////////////
Ulong ul_num
Int answer,answer1,answer2,answer3,answer4,answer5,answer6,answer7
String ls_driver,db_path,dqml
dqml=GetCurrentDirectory ( )
//取得数据库驱动程序的路径
answer=RegistryGet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)","driver",RegString!,ls_driver)
IF answer=-1 THEN
Messagebox("错误","应用程序无法获取Windows的系统目录,系统统将终止运行!",Stopsign!)
RETURN
END IF
//添加gw数据源
Ulong ul_num
Int answer,answer1,answer2,answer3,answer4,answer5,answer6,answer7
String ls_driver,db_path,dqml
dqml=GetCurrentDirectory ( )
//取得数据库驱动程序的路径
answer=RegistryGet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)","driver",RegString!,ls_driver)
IF answer=-1 THEN
Messagebox("错误","应用程序无法获取Windows的系统目录,系统统将终止运行!",Stopsign!)
RETURN
END IF
//添加gw数据源
在sqlite.org上下载得到Windows版本的 sqlite,它是以sqlitedll.zip文件提供的,其中有sqlite3.def和 sqlite3.dll文件,当然可以直接通过LoadLibrary等WIN32API来操作dll,查找其中包含的函数,并使用这些函数,但是一般都 不这么做,原因很简单:这样太麻烦,所以一般先使用LIB命令生成用于链接的lib,然后把sqlite头文件sqlite3.h包含进程序中,
这样直接调用 sqlite的API就方便多了.当然sqlite3.h文件得从sqlite源代码(以sqlite-source-3_3_4.zip文件提供)中搞到.
这样直接调用 sqlite的API就方便多了.当然sqlite3.h文件得从sqlite源代码(以sqlite-source-3_3_4.zip文件提供)中搞到.
使用VC++的LIB命令有以下步骤:
SQLite官方下载只提供给我们一个sqlite3.dll跟一个sqlite3.def文件,并没有提供用于VC++6.0的lib文件,可以利用sqlite3.def文件生成,步骤如下:
1.将sqlite3.h(可从源码目录获得)拷贝到C:\Program Files\Microsoft Visual Studio\VC98\Include目录下,这时编译可通过,但链接错误,因为没有LIB文件
2.启动一个命令行程序,进入VC的安装目录C:\Program Files\Microsoft Visual Studio\VC98\Bin,在这个目录下面有一个LIB.exe文件,使用它就能生成sqlite3.lib文件,将sqlite3.def文件放 到相同目录,或者绝对路径也可以, 然后在命令行输入如下命令:
LIB /MACHINE:IX86 /DEF:sqlite3.def
该命令生成两个文件:sqlite3.lib和sqlite3.exp
运行该命令时,如果提示找不到MSPDB60.DLL文件,可从其它目录拷贝至Bin目录下
3.将生成的sqlite3.lib拷贝到Lib目录下,将sqlite3.dll拷贝到C:\WINNT\system32目录下
5.将sqlite3.lib加入到工程链接中,Project->Settings,Link选项卡,Object/library modules最后添入sqlite3.lib
1.将sqlite3.h(可从源码目录获得)拷贝到C:\Program Files\Microsoft Visual Studio\VC98\Include目录下,这时编译可通过,但链接错误,因为没有LIB文件
2.启动一个命令行程序,进入VC的安装目录C:\Program Files\Microsoft Visual Studio\VC98\Bin,在这个目录下面有一个LIB.exe文件,使用它就能生成sqlite3.lib文件,将sqlite3.def文件放 到相同目录,或者绝对路径也可以, 然后在命令行输入如下命令:
LIB /MACHINE:IX86 /DEF:sqlite3.def
该命令生成两个文件:sqlite3.lib和sqlite3.exp
运行该命令时,如果提示找不到MSPDB60.DLL文件,可从其它目录拷贝至Bin目录下
3.将生成的sqlite3.lib拷贝到Lib目录下,将sqlite3.dll拷贝到C:\WINNT\system32目录下
5.将sqlite3.lib加入到工程链接中,Project->Settings,Link选项卡,Object/library modules最后添入sqlite3.lib
这时以下程序便可通过编译链接并运行:
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <stdlib.h>
#include <sqlite3.h>
int column_names_printed = 0;
void print_row(int n_values, char** values)
{
int i;
for (i = 0; i < n_values; ++i) {
printf("%10s", values[i]);
}
printf("\n");
}
{
int i;
for (i = 0; i < n_values; ++i) {
printf("%10s", values[i]);
}
printf("\n");
}
int print_result(void* data, int n_columns, char** column_values, char** column_names)
{
if (!column_names_printed) {
print_row(n_columns, column_names);
column_names_printed = 1;
}
print_row(n_columns, column_values);
return 0;
}
{
if (!column_names_printed) {
print_row(n_columns, column_names);
column_names_printed = 1;
}
print_row(n_columns, column_values);
return 0;
}
int main()
{
sqlite3 *db=NULL;
char *errMsg = NULL;
int rc;
rc = sqlite3_open("test.db", &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("open test.db successfully!\n");
rc = sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL);
rc = sqlite3_exec(db, "CREATE TABLE students(number varchar(10), name varchar(10), \
sex varchar(6), age varchar(2));", NULL, NULL, NULL);
rc = sqlite3_exec(db, "INSERT INTO students VALUES('00001', 'Mary', 'female', '15');\
INSERT INTO students VALUES('00002', 'John', 'male', '16');\
INSERT INTO students VALUES('00003', 'Mike', 'male', '15');\
INSERT INTO students VALUES('00004', 'Kevin', 'male', '17');\
INSERT INTO students VALUES('00005', 'Alice', 'female', '14');\
INSERT INTO students VALUES('00006', 'Susan', 'female', '16');\
INSERT INTO students VALUES('00007', 'Christina', 'female', '15');\
INSERT INTO students VALUES('00008', 'Brian', 'male', '16');\
INSERT INTO students VALUES('00009', 'Dennis', 'male', '14');\
INSERT INTO students VALUES('00010', 'Daphne', 'female', '18');",
NULL, NULL, &errMsg);
column_names_printed = 0;
rc = sqlite3_exec(db, "SELECT students.* FROM students WHERE sex='female';", print_result, NULL, &errMsg);
column_names_printed = 1;
printf("\n");
column_names_printed = 0;
rc = sqlite3_exec(db, "SELECT students.* FROM students WHERE sex='male';", print_result, NULL, &errMsg);
column_names_printed = 1;
rc = sqlite3_exec(db, "COMMIT TRANSACTION;", NULL, NULL, NULL);
printf("error code: %d\n", rc);
printf("error message: %s\n", errMsg);
{
sqlite3 *db=NULL;
char *errMsg = NULL;
int rc;
rc = sqlite3_open("test.db", &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("open test.db successfully!\n");
rc = sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL);
rc = sqlite3_exec(db, "CREATE TABLE students(number varchar(10), name varchar(10), \
sex varchar(6), age varchar(2));", NULL, NULL, NULL);
rc = sqlite3_exec(db, "INSERT INTO students VALUES('00001', 'Mary', 'female', '15');\
INSERT INTO students VALUES('00002', 'John', 'male', '16');\
INSERT INTO students VALUES('00003', 'Mike', 'male', '15');\
INSERT INTO students VALUES('00004', 'Kevin', 'male', '17');\
INSERT INTO students VALUES('00005', 'Alice', 'female', '14');\
INSERT INTO students VALUES('00006', 'Susan', 'female', '16');\
INSERT INTO students VALUES('00007', 'Christina', 'female', '15');\
INSERT INTO students VALUES('00008', 'Brian', 'male', '16');\
INSERT INTO students VALUES('00009', 'Dennis', 'male', '14');\
INSERT INTO students VALUES('00010', 'Daphne', 'female', '18');",
NULL, NULL, &errMsg);
column_names_printed = 0;
rc = sqlite3_exec(db, "SELECT students.* FROM students WHERE sex='female';", print_result, NULL, &errMsg);
column_names_printed = 1;
printf("\n");
column_names_printed = 0;
rc = sqlite3_exec(db, "SELECT students.* FROM students WHERE sex='male';", print_result, NULL, &errMsg);
column_names_printed = 1;
rc = sqlite3_exec(db, "COMMIT TRANSACTION;", NULL, NULL, NULL);
printf("error code: %d\n", rc);
printf("error message: %s\n", errMsg);
sqlite3_close(db);
return 0;
}
return 0;
}
首先需要强调的是,这种自动登陆的方式省略了身份验证的过程,可能会导致一定的安全风险,特别管理员级别的高权限用户自动登陆更要谨慎使用。
对于WIN2000的设置方式:
以管理员身份登陆,依次打开“我的电脑-控制面板-用户和密码”,在打开的窗口中选择“用户”标 签,清除“要使用本机,用户必须输入用户名和密码”左侧的复选框,点击“应用”,弹出一个标题为“自动登陆”的窗口,依次输入自动登陆使用的用户名、密 码,在“确认密码”项中再次输入密码,最后点击确定。重新启动系统后就可以实现以先前输入的用户帐号自动登陆了。
对于WINXP的设置方式:
以管理员身份登陆,点击“开始”、“运行”,输入“CONTROL USERPASSWORDS2”,点击确定后弹出窗口,选择“用户”标签,清除“要使用本机,用户必须输入用户名和密码”左侧的复选框,点击“应用”,弹 出一个标题为“自动登陆”的窗口,依次输入自动登陆使用的用户名、密码,在“确认密码”项中再次输入密码,最后点击确定。重新启动系统后就可以实现以先前 输入的用户帐号自动登陆了。





