Открываю соединение с базой invoke sqlite3_open,ADDR DBName,ADDR datab выполняю запрос invoke sqlite3_exec,datab,SADD("SELECT NAME,ID FROM FType;"),ADDR CallBack,0,ADDR errMsg CallBack - выглядит следующим образом CallBack proc not_usedWORD,argcWORD,argvWORD,azColNameWORD mov eax,argv mov eax,[eax] invoke MessageBox,NULL,EAX,eax,MB_OK ret CallBack endp Хотелось бы в Callback пройтись по всем значениям (на данный момент MessageBox выводит только 1-е значение 1-й колонки).Увеличение eax на длину 1-го значения результата не дает. Буду признателен за кусок кода или любую информацию для решения этой проблемы.
Код (Text): while(argc--) printf("%hs=%hs\n", azColName[argc], argv[argc]); return 0; Выводит все колонки в обратном порядке. Думаю, на асм перевести не составит труда.
Спасибо. У меня на С написать проблем нет + на сайте http://sqlite.org есть пример. Проблема именно с асмом. Если у меня таблица типа ID NAME 1 NM1 2 NM2 3 NM3 при выполнении запроса select name,id from table1 и выполнении кода указанного вами я получаю ID 1 2 3 NAME NM1 NM2 NM3 правильно ли я понял ? Как мне каждое значение Name отдельно вывести в MessageBox ? В Ollydebugger в дампе видно только первое значение результата, т.е. NM1
Нет. Твоя функция вызывается для каждой строки результата. А передаются ей колонки и значений одной строки: Код (Text): invoke sqlite3_open,szdb,hdb invoke sqlite3_exec,[hdb],sql,exec_cbk,uid,tmp invoke printf,szdone proc exec_cbk c uses ebx esi edi, arg,colc,values,names mov edx,[arg] ; index inc dword[edx] invoke printf,sf_idx,dword[edx] xor ebx,ebx cmp ebx,[colc] jz .end mov esi,[values] mov edi,[names] @@: mov eax,[esi+ebx*4] ; value[ebx] mov edx,[edi+ebx*4] ; name[ebx] invoke printf,sf_cv,edx,eax inc ebx cmp ebx,[colc] jb @B .end: invoke printf,sf_crlf xor eax,eax ret endp szdb db 'test.db',0 szdone db 'done',0 sql db 'select * from t1',0 sf_idx db "%d. ",0 sf_cv db '%hs=%hs ',9,0 sf_crlf db 13,10,0 uid dd 0 hdb dd ? tmp dd ? 1. id=1 name=NM1 2. id=2 name=NM2
Спасибо.Сегодня вечером попробую. Т.е. CallBack вызывается для каждой строки результата ? Странно у меня только 1 раз, хотя в таблице 10 записей.
у меня только 1 раз, хотя в таблице 10 записей Возможно, из callback'a нужно возвращать определенное значение: true или false как индикатор необходимости продолжения вывода для последующих строк?