Po odwiedzeniu dziesiątek stron internetowych zawierających informacje o SQLite wciąż nie mogę znaleźć rozwiązania, które naprawiłoby błąd podczas wiązania bloba. Oto decleration tabela:Wprowadzanie bloku SQLite C++
CREATE TABLE ONE (
ID INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
NAME CHAR(50) NOT NULL,
LABEL CHAR(50),
GRP CHAR(50),
FILE BLOB
);
A oto kod do wstawienia:
int InsertFile(string name)
{
const char* dbname = name.c_str();
sqlite3 *database;
int rc = sqlite3_open(dbname, &database);
char *zErrMsg = 0;
unsigned char *buffer = (unsigned char*) malloc(sizeof(char)*MAX);
ifstream file;
file.open("Sql.pdf", ios::in|ios::binary);
if (! file)
{
cout << "An error occurred opening the file" << endl;
}
int count = 0;
const void* fileptr = NULL;
fileptr = buffer;
while(file.good())
{
char c=file.get();
buffer[count]=c;
count++;
}
file.close();
sqlite3_stmt *stmt = NULL;
char* statement = "INSERT INTO ONE( ID, NAME, LABEL, GRP, FILE) VALUES ( NULL, 'fedfsdfss', NULL, NULL, ?);";
rc = sqlite3_prepare_v2(database, statement, 0, &stmt, NULL);
rc = sqlite3_bind_blob(stmt, 1, fileptr, sizeof(char)*count, SQLITE_TRANSIENT);
const char* result = sqlite3_errmsg(database);
rc = sqlite3_step(stmt);
result = sqlite3_errmsg(database);
sqlite3_close(database);
free(buffer);
fileptr=NULL;
return 0;
} EDIT: Pasted pełen funkcji, ilość znaków Próbuję wstawić wynosi około 350K.
Wynik z binb_blob wynosi zawsze 21, kod błędu nie zawiera niczego. bufor zawiera dane binarne, które najprawdopodobniej nie są zbyt duże, stąd kod błędu. Wszelkie podpowiedzi byłyby doceniane.
'fileptr = & bufor;' dla jednego. –
Jest również możliwe, że 'count' jest fałszywe - nie widzimy, jak to jest ustawione. –
count to liczba znaków w buforze i co jest nie tak z fileptr? Umieszczenie samego bufora nie zmienia nic imo – Ghostli