Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 MS SQL  [new]
Valerii
Member

Откуда:
Сообщений: 749
Всем привет,
Вопрос, кто подскажет как правильно организовывается идеология добавления записей в таблицу 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 янв 06, 22:26    [2275018]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

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 янв 06, 01:54    [2275274]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить