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

Откуда:
Сообщений: 14
Никак не получается из VisualFoxPro(6.0 SP3) выполнить манипуляции
в SQL в целом таблицами, а не построчно, в частности не идет
выполнение такой программки:
set safety off
ncnnct=0
public array RESUL(100,2)
store 1 TO RESUL
public perem3
perem='ДА'
perem2='2050/01/01'
ncnnct=sqlconnect('source')
sqlexec(ncnnct,'select a.id_usr,b.vid;
from bankr a, unit b;
where a.id_usr=b.id_usr;
and (b.vid=131 or b.vid=181 or b.vid=585 or b.vid=591);
and b.dat_stop=?perem2;
into array RESUL')
sqlexec(ncnnct,'insert into promej from ARRAY RESUL')
sqldisconnect(ncnnct)

Вообще-то мне надо из двух таблиц SQL сформировать третью, управляя
из VPF,но VPF, как я понял, это не позволяет. Тогда я придумал обходной вариант, но он не срабатывает.
ПОМОГИТЕ, КТО МОЖЕТ, "ЧАЙНИКУ" !
3 апр 03, 15:26    [163984]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляции таблицами SQL из VisualFoxPro  [new]
Victor Am
Member

Откуда:
Сообщений: 92
В частности необходимо изменить часть кода(остальное не принципиально, лишь бы валидный номер соединения был):


ncnnct=sqlconnect('source')
sqlexec(ncnnct,'select a.id_usr,b.vid;
from bankr a, unit b;
where a.id_usr=b.id_usr;
and (b.vid=131 or b.vid=181 or b.vid=585 or b.vid=591);
and b.dat_stop=?perem2;
into array RESUL'
)

Сделать около такого (только возвращаю в курсор VFP, а не в массив SQL server):

ncnnct=sqlconnect('source')
mcommand=''
mcommand=mcommand + 'select a.id_usr,b.vid'
mcommand=mcommand + ' from bankr a, unit b'
mcommand=mcommand + ' where a.id_usr=b.id_usr'
mcommand=mcommand + ' and (b.vid=131 or b.vid=181 or b.vid=585 or b.vid=591)'
mcommand=mcommand + ' and b.dat_stop=?perem2'
sqlexec(ncnnct,mcommand,'CursorResult' )

Результат запроса возвратится в локальный курсор VFP CursorResult.
IMHO Незабудь, если будешь писать в команде:
sqlexec(ncnnct,mcommand,'CursorResult' )
вместо mcommand запрос(текст), то больше 255 не обработается,
нужно определить переменную и в нее порциями не больше 255 добавлять.
3 апр 03, 15:55    [164028]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляции таблицами SQL из VisualFoxPro  [new]
Victor Am
Member

Откуда:
Сообщений: 92
А лучше все сделать на стороне сервера:

ncnnct=sqlconnect('source')
mcommand=''
mcommand=mcommand + 'CREATE TABLE DATARESULT (id_usr INT, vid INT)'

nError=sqlexec(ncnnct,mcommand)
**Проверил на ошибку
mcommand=mcommand + 'INSERT INTO DATARESULT '
mcommand=mcommand + ' ('
mcommand=mcommand + ' id_usr,
mcommand=mcommand + '
vid
mcommand=mcommand + ' )
mcommand=mcommand + '
select a.id_usr,b.vid'
mcommand=mcommand + '
from bankr a, unit b'
mcommand=mcommand + '
where a.id_usr=b.id_usr'
mcommand=mcommand + '
and (b.vid=131 or b.vid=181 or b.vid=585 or b.vid=591)'
mcommand=mcommand + '
and b.dat_stop=?perem2'
nError=sqlexec(ncnnct,mcommand)
**Проверил на ошибку

Если чтото не пройдет, то попробуй запрос на сервере выполнить.
Да еще бы надо дописать в начале проверку на существование таблицы DATARESULT и сделать ей drop table DATARESULT
3 апр 03, 16:27    [164082]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляции таблицами SQL из VisualFoxPro  [new]
Victor Am
Member

Откуда:
Сообщений: 92
Забыл завершающие кавычки:

mcommand=mcommand + ' id_usr,'
mcommand=mcommand + ' vid'
mcommand=mcommand + ' )'
3 апр 03, 17:21    [164117]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляции таблицами SQL из VisualFoxPro  [new]
nikita
Member

Откуда:
Сообщений: 14
Victor Am
Ростов-на-Дону

Что-то все равно не получается!
Простой INSERT, отмеченный *** проходит, а структурный,
с использованием SELECT, не проходит:
perem2='2050/01/01'
ncnnct=sqlconnect('resource')
mcomm=' '
sqlexec(ncnnct,'drop table DATARESU')
SQLEXEC(ncnnct,'create table DATARESU (id_usr INT,vid INT)')
mcomm=mcomm+'insert into DATARESU(id_usr,vid)'
***mcomm=mcomm+'values(1001246,131)'
mcomm=mcomm+'select a.id_usr,b.vid'
mcomm=mcomm+'from bankr a, unit b'
mcomm=mcomm+'where a.id_usr=b.id_usr'
mcomm=mcomm+'and (b.vid=131 or b.vid=181 or b.vid=585 or b.vid=591)'
mcomm=mcomm+'and b.dat_stop=?perem2'
mcomm=mcomm+')'
nError=sqlexec(ncnnct,mcomm)
sqlexec(ncnnct,mcomm)
sqlexec(ncnnct,'select * from DATARESU')
BROW
sqldisconnect(ncnnct)
4 апр 03, 10:09    [164552]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить