


- 等级:略有小成
- 积分:289
- 金钱:150
- 帖数:26
- 注册:2007-9-14
。。。
char *sql = "INSERT INTO /"ca01/" VALUES( '001' , ? , '1111111' , '222');" ;
sqlite3_stmt * stmt;
sqlite3_prepare ( db, sql, strlen ( sql), &stmt, NULL );
sqlite3_bind_text(stmt, 1,"深圳市宝安区爱华产品经销部", 256, SQLITE_TRANSIENT);
sqlite3_step ( stmt );
。。。
非常感谢各位热心的朋友。
淡去的烟味




- 等级:初窥门径
- 积分:35
- 金钱:19
- 帖数:4
- 注册:2007-5-11
我照你的做了,但还是查不到,急啊,帮帮忙啊。最好贴出完整的代码啊。




- 等级:初窥门径
- 积分:35
- 金钱:19
- 帖数:4
- 注册:2007-5-11
sqlite3 *db=NULL;
char *errmsg = 0;
int result;
result = sqlite3_open("my.db", &db);
char sz[] = "CREATE TABLE [ca01] ( [a] text NULL, [b] text NULL, [c] text NULL, [d] text NULL)";
result = sqlite3_exec(db, sz, NULL, NULL, &errmsg);
char *sql = "INSERT INTO /"ca01/" VALUES( '001' , ? , '1111111' , '222');" ;
sqlite3_stmt * stmt;
sqlite3_prepare ( db, sql, strlen ( sql), &stmt, NULL );
sqlite3_bind_text(stmt, 1,"深圳市宝安区爱华产品经销部", 256, SQLITE_TRANSIENT);
sqlite3_step ( stmt );
char **dbResult;
int nRow, nColumn, i , j, index;
result = sqlite3_get_table( db, "select * from ca01 WHERE b like '%%爱华%%' ", &dbResult, &nRow, &nColumn, &errmsg );
if ( SQLITE_OK == result )
{
index = nColumn;
TRACE( "查到%d条记录/n", nRow );
for( i = 0; i < nRow ; i++ )
{
TRACE( "第 %d 条记录/n", i+1 );
for( j = 0 ; j < nColumn; j++ )
{
TRACE("字段名:%s -> 字段值:%s/n", dbResult[j], dbResult [index] );
++index;
}
TRACE("-------/n" );
}
}
sqlite3_free_table( dbResult );
sqlite3_close(db);




- 等级:略有小成
- 积分:289
- 金钱:150
- 帖数:26
- 注册:2007-9-14
以下的方式可以查到:
sqlite3 *db=NULL;
int rc = sqlite3_open("data.db", &db ); //打开指定的数据库文件
if( rc )
{
ShowMessage( sqlite3_errmsg(db) );
sqlite3_close( db );
return;
}
sqlite3_stmt * stmt;
AnsiString temp = "%爱华%";
char * SQLstr = "SELECT * FROM ca01 where a002 like ?;";
sqlite3_prepare ( db, SQLstr, strlen ( SQLstr ), &stmt, NULL );
sqlite3_bind_text( stmt, 1,temp.c_str(), temp.Length(), SQLITE_TRANSIENT );
while ( sqlite3_step ( stmt )==SQLITE_ROW )
{
//测试
Edit1->Text = StrPas(sqlite3_column_text( stmt, 0) );
Edit2->Text = StrPas(sqlite3_column_text( stmt, 1) );
}
sqlite3_finalize ( stmt );
sqlite3_close( db ); 淡去的烟味




- 等级:初窥门径
- 积分:35
- 金钱:19
- 帖数:4
- 注册:2007-5-11
sqlite3 *db=NULL;
char *errmsg = 0;
int result;
result = sqlite3_open("my.db", &db);
char sz[] = "CREATE TABLE [ca01] ([a001] text NULL, [a002] text NULL, [a003] text NULL, [a004] text NULL)";
result = sqlite3_exec(db, sz, NULL, NULL, &errmsg);
char *sql = "INSERT INTO /"ca01/" VALUES( '001' , ? , '1111111' , '222');" ;
sqlite3_stmt * stmt;
sqlite3_prepare ( db, sql, strlen ( sql), &stmt, NULL );
sqlite3_bind_text(stmt, 1,"深圳市宝安区爱华产品经销部", 256, SQLITE_TRANSIENT);
sqlite3_step ( stmt );
// AnsiString temp = "%爱华%";
char temp[100] = "'%爱华%'"; // 换成"%%爱华%%" 或 " '%%爱华%%' " 都不行
char * SQLstr = "SELECT * FROM ca01 where a002 like ?";
sqlite3_prepare ( db, SQLstr, strlen ( SQLstr ), &stmt, NULL );
// sqlite3_bind_text( stmt, 1,temp.c_str(), temp.Length(), SQLITE_TRANSIENT );
sqlite3_bind_text( stmt, 1, temp, strlen(temp), SQLITE_TRANSIENT );
while ( sqlite3_step ( stmt )==SQLITE_ROW ) // 总是sqlite3_step总是返回SQLITE_DONE, 而不是SQLITE_ROW
{
//测试
printf( "%s, %s/n", sqlite3_column_text( stmt, 0), sqlite3_column_text( stmt, 1) );
// Edit1->Text = StrPas(sqlite3_column_text( stmt, 0) );
// Edit2->Text = StrPas(sqlite3_column_text( stmt, 1) );
}
sqlite3_finalize ( stmt );
sqlite3_close( db );




- 等级:略有小成
- 积分:289
- 金钱:150
- 帖数:26
- 注册:2007-9-14
那的确是很奇怪了,有可能是你编程环境的原因了,像有朋友说在C#上用得很好。我刚刚用您上面贴出的代码测试了一下,的确是没有问题啊,返回的结果是正确的。
注:测试环境: 简体中文WINXP + C++Build 6.0 + sqlite3 淡去的烟味




- 等级:略有小成
- 积分:289
- 金钱:150
- 帖数:26
- 注册:2007-9-14
AnsiString temp = "%爱华%";
或
char temp[100] = "'%爱华%'";
或
char temp[100] = "%%爱华%%";
都测试过,可以。
我原本觉得要真是用不了LIKE子句来查询数据那真是个大麻烦了,使用起来会非常被动。现在总算可以了。
不知道Sqlite For Linux版能不能用到在sco openserver下,当然真正应用上估计要优先考虑在Linux上使用,只是因为装有现在的系统方便。等有时间测试一下。
[ 本帖子最后于 2007-11-6 3:55:27 编辑 ] 淡去的烟味




- 等级:初窥门径
- 积分:35
- 金钱:19
- 帖数:4
- 注册:2007-5-11
可能真是编程环境的原因了,我用的是vc6,我再换换环境或其它办法试试,有最新结果再上报。