|
|
|
MS SQL
|
|||
|---|---|---|---|
|
#18+
Всем привет, Вопрос, кто подскажет как правильно организовывается идеология добавления записей в таблицу MSSQL 2000. У меня есть проект на VFP8 и в нем я создал Connection используя ODBC драйвер к базе данных в которой есть таблица goods.. Вот пример: USE data\Goods IN 0 && VFP *.dbf - table STORE SQLCONNECT('TestConnect') TO gnConnHandle ? gnConnHandle IF gnConnHandle <= 0 = MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error') RETURN ELSE = MESSAGEBOX('Connection made', 48, 'SQL Connect Message') ENDIF b = SQLEXEC(gnConnHandle, "SELECT * FROM goods", "MyCursor") SELECT MyCursor && проверяю если есть данные и доступ BROW SELECT Goods GO TOP DO WHILE !EOF() xkey = ALLTRIM(key) xParent = ALLTRIM(Parent) xtext = ALLTRIM(text) b = SQLEXEC(gnConnHandle, "INSERT INTO goods (key, parent, TEXT) Values (?xkey, ?xparent, ?xtext)") ?b && возвращает -1 = SQLCOMMIT (gnConnHandle) SELECT Goods SKIP ENDDO = SQLDISCONNECT(gnConnHandle) Но мне не понятно, почему данные добаялются в таблицу goods MS SQL server-a... goods (key nVarchar(15), parent nVarchar(15), text nVarchar(100)) Всем спасибо.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 22:26 |
|
||
|
MS SQL
|
|||
|---|---|---|---|
|
#18+
Hi Valerii! > GO TOP > DO WHILE !EOF() Это заменяет SCAN > xkey = ALLTRIM(key) > xParent = ALLTRIM(Parent) > xtext = ALLTRIM(text) > b = SQLEXEC(gnConnHandle, "INSERT INTO goods (key, parent, TEXT) > Values (?xkey, ?xparent, ?xtext)") Можно прямо в тексте запроса писать .... VALUES (?ALLTRIM(Goods.key), ...) - т.е. переменные не обязательны. > ?b && возвращает -1 Ну раз возвращает -1 то надо через AERROR(laErrorInfo) DISPLAY MEMOTY LIKE laErrorInfo посмотреть что же за ошибка возникла. Меня кстати не радуют твои имена полей - там слова зарезервированные - и бог знает как на это отреагирует SQLServer. > = SQLCOMMIT (gnConnHandle) Не просто = - а смотреть что возвращает функция! И кроме того использование SQLCOMMIT() бесполезно до тех пор, пока через SQLSETPROP(..., "Transactions", 2) не будет включен режим "ручного управления" этими самыми транзакциями. Также в общем и целом нет особого смысла включать ручное управление транзакциями, если ты в любом случае будешь подтверждать КАЖДУЮ ИНДИВИДУАЛЬНУЮ операцию. Я бы на твоём месте вынес коммит за рамки цикла, или по меньшей мере коммитил не каждую запись, а скажем каждые 100 записей. > SELECT Goods > SKIP > ENDDO Соответственно вместо всего этого ENDSCAN Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2006, 01:54 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=279&tid=1592556]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
34ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 305ms |

| 0 / 0 |
