· Начало · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› MASM, Access и ODBC

Посл.отвђт Сообщенiе


Дата: Авг 29, 2003 03:01:41

Кто знает, как при помощи ODBC записать в базу данных Access'a (*.mdb)?
Примеров и описаний в Инете много, но во всех их идет чтение, а не запись.
Может кто подкинет пару ссылок на подобные статьи (желательно на русском) или исходники?
Заранее благодарен.


Дата: Авг 29, 2003 03:06:32

Разницы ведь никакой! Просто вместо "SELECT * FROM myTable" подсуньте "INSERT INTO myTable VALUES (paarm1,param2,...paramN)" в SQLExecDirect и всего делов.


Дата: Авг 29, 2003 03:30:38

2 Quantum
Пытался - не получается. Проверял в Access'e - работает, а в программе почему-то не хочет.
Может есть подходящий исходник?


Дата: Авг 29, 2003 04:07:51

У меня работает именно так (с mySQL, правда). Возьмите тут на сайте пример с ODBC для Access и поменяйте SELECT на INSERT.


Дата: Авг 29, 2003 04:52:49 · Поправил: Sk. Inc.

2 Quantum
Странно, но не работает. Вот исходник:

.386
.model flat, stdcall
;--------------------------------------------------------------------- -----------
include kernel32.inc
include odbc32.inc
include windows.inc
includelib kernel32.lib
includelib odbc32.lib
;--------------------------------------------------------------------- -----------
.const
szConn db 'DBQ=c:\1\db1.mdb;DRIVER={Microsoft Access Driver (*.mdb)};', 0
szStmt db 'insert into myTable (myField) values ("text")', 0
;--------------------------------------------------------------------- -----------
.data?
hEnv dd ?
hConn dd ?
hStmt dd ?
OutStringLength dd ?
szBuffer db 1024 dup(?)
szConnect db 1024 dup(?)
;--------------------------------------------------------------------- -----------
.code
start:
; Подключение к базе
invoke SQLAllocHandle, SQL_HANDLE_ENV, NULL, offset hEnv
invoke SQLSetEnvAttr, hEnv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, NULL
invoke SQLAllocHandle, SQL_HANDLE_DBC, hEnv, offset hConn
invoke SQLDriverConnect, hConn, NULL, addr szConn, sizeof szConn -1, addr szBuffer, sizeof szBuffer -1, addr OutStringLength, SQL_DRIVER_NOPROMPT
; Запрос
invoke SQLAllocHandle, SQL_HANDLE_STMT, hConn, offset hStmt
invoke SQLExecDirect, hStmt, offset szStmt, sizeof szStmt
; Отключение от базы
invoke SQLFreeHandle, SQL_HANDLE_STMT, hStmt
invoke SQLDisconnect, hConn
invoke SQLFreeHandle, SQL_HANDLE_DBC, hConn
invoke SQLFreeHandle, SQL_HANDLE_ENV, hEnv
; закрытие программы
invoke ExitProcess, NULL
end start



А вот архив с исходником


Дата: Авг 29, 2003 05:05:34

Странно - после правки архив пропал.
Вот еще один

1260478266__db.ZIP


Дата: Авг 29, 2003 05:43:58

Значение попало в базу с пятой попытки. Мистика.
ЗЫ: Проверил этот код под mySQL и всё сработало на ура!


Дата: Авг 29, 2003 19:15:30

А у меня чего-то работать не хочет.
Кто-нибудь имеет хоть какие-то предположения?


Дата: Авг 29, 2003 20:49:57 · Поправил: Sk. Inc.

Ура, работает!!!
Большое тебе, Quantum, спасибо за помощь.
Вся проблема заключалась в кавычках при передаче строки.
Вместо insert into myTable (myField) values ("text") надо было просто написать insert into myTable (myField) values ('text') и все благополучно заработало.
Торжествено объявляю, что проблема наконец-то разрешена, и по сему закрываю тему.