【发布时间】:2014-06-25 21:43:14
【问题描述】:
我在项目中有 Query.c、Query.h 和 main.c 文件。我在 Query.c 中定义了一个 SQLOpen() 函数并在主程序中调用它。执行函数所需的变量在本地声明。当我在 main 中调用 SQLOpen(0 函数时,程序没有执行,因为它没有检测到 SQLOpen() 函数中定义的一个局部变量 'char logInData [256];'。
Query.c:
#include <stdio.h>
#include "/Library/Frameworks/Firebird.framework/Versions/A/Headers/ibase.h"
#include "Query.h"
#define DATABASE_PATH "/Users/Sumanth/Desktop/NewDB2.fdb"
int SQLOpen()
{
ISC_STATUS status_vector[20];
isc_db_handle database=NULL;//database = SQLGetDatabase();
char logInData [256];
short bufferLength;
sprintf(logInData, "%c%c%c%c%c%c%s%c%c%s", isc_dpb_version1,
isc_dpb_num_buffers,
1,
90,
isc_dpb_user_name,
strlen("SYSDBA"),
"SYSDBA",
isc_dpb_password,
strlen("masterkey"),
"masterkey");
bufferLength = strlen(logInData);
if (isc_attach_database(status_vector, strlen(DATABASE_PATH), DATABASE_PATH, &database,bufferLength, logInData))
{
isc_print_status(status_vector);
}
isc_print_status(status_vector);
// SQLTestForErrors(status_vector);
// throw(ConnectionError, "");
return 0;
}
} Query.h:
#ifndef SQLQueryTest_Query_h
#define SQLQueryTest_Query_h
int SQLOpen();
#endif
main.c:
#include <stdio.h>
#include "Query.h"
#include "/Library/Frameworks/Firebird.framework/Versions/A/Headers/ibase.h"
int main(int argc, const char * argv[])
{
SQLOpen();
}
如果我执行这个主函数,我会收到错误(函数调用是针对使用 firebird 的数据库函数,但它没有连接) 如果我包含 'char logInData [256];'在 main 函数中,它正在工作(连接到数据库)。代码如下所述。 main.c:
#include <stdio.h>
#include "Query.h"
#include "/Library/Frameworks/Firebird.framework/Versions/A/Headers/ibase.h"
int main(int argc, const char * argv[])
{
char logInData [256];
SQLOpen();
}
为什么我应该包含 'char logInData [256];'虽然它已经在 SQLOpen() 函数中声明为局部变量? 为什么它不从 SQLOpen() 函数中读取?
请查看此问题并帮助我解决。
It is not displaying any error but I am unable to connect to database.
The status of status vector is :
ISC_STATUS [20]
[0] long 0
[1] long 0
[2] long -1073741909
[3] long -1073743396
[4] long -1881089127
[5] long -1881089079
[6] long -1073741909
[7] long -1880974640
[8] long 515730401
[9] long 1
[10] long -1073743404
[11] long 4180
[12] long -1073743544
[13] long -1881140636
[14] long 4096
[15] long 0
[16] long 1
[17] long -1073743488
[18] long -1073743480
[19] long -1073743404
for a successful connection to the database, the status of status vector should look like:
status_vector ISC_STATUS [20]
[0] long 1
[1] long 0
[2] long 0
[3] long 0
[4] long 0
[5] long 0
[6] long 0
[7] long 0
[8] long 0
[9] long 0
[10] long 0
[11] long 0
[12] long 0
[13] long 0
[14] long 0
[15] long 0
[16] long 0
[17] long 0
[18] long 0
[19] long 0
【问题讨论】:
-
我只是把它扔掉了,但你的
sprint中几乎没有一个实际上是一个字符,那么你为什么使用%c作为格式说明符呢?它不是某种通用的魔法黑匣子。了解sprintf()如何工作。 -
你有makefile吗?你在使用一些 IDE 吗?如果问题出在编译中,请说明你是如何编译的。
-
你得到什么错误?
-
它没有显示任何错误但无法连接到数据库。状态向量的状态贴在上面。请看一下