我在项目中有Query.c,Query.h和main.c文件。我在Query.c中定义了一个SQLOpen()函数并在main中调用它。执行函数所需的变量在本地声明。当我调用SQLOpen(在main中的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();
}
如果我执行这个main函数,我会收到错误(函数调用是使用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
答案 0 :(得分:0)
当我宣布ISC_STATUS status_vector [20];&#39;作为一个全局变量,它工作正常,我能够连接到数据库。