Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Манипуляции таблицами SQL из VisualFoxPro / 19 сообщений из 19, страница 1 из 1
03.04.2003, 15:29
    #32132852
nikita
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
Никак не получается из 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, как я понял, это не позволяет. Тогда я придумал обходной вариант, но он не срабатывает.
ПОМОГИТЕ, КТО МОЖЕТ, "ЧАЙНИКУ" !
...
Рейтинг: 0 / 0
03.04.2003, 15:34
    #32132860
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
Нужно почитать хелп про функцию sqlexec. Вопросы нужно задавать подробно, в частности нужно было написать код ошибки.

строка "into array RESUL" лишняя.
...
Рейтинг: 0 / 0
03.04.2003, 15:56
    #32132886
nikita
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
В том то и дело, что мне надо сохранить результат SELECTа.
Хочу в RESUL, но не получается ни результата, ни сообщения об
ошибке.
...
Рейтинг: 0 / 0
03.04.2003, 16:11
    #32132904
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
Ещё раз.

Всё что делает sqlexec это передаёт серверу текстовую строку с скл-командой и получает результат.

Работа твоего кода:
первый sqlexec - выбор данных в массив на сервере
второй sqlexec - вставка данных в таблицу на сервере из массива на клиенте

понятное дело что ничего не вставляется.

Мож ты как-то не так сообщение об ошибке смотриш? По-моему там ещё и синтаксис скл комманд неверный.
...
Рейтинг: 0 / 0
04.04.2003, 09:35
    #32133244
chagoserg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
Сообщение об ошибке можно узнать разобрав массив результата возвращаемого sqlexec при помощи функции AERROR(), но сам синтаксис запроса просто не верный и он не выполняется. Вся манипуляция решается созданием таблицы на стороне сервера и вставкой результатов запроса в неё без получения результатов на клиента . Естественно ни каких массивов там не может быть...
...
Рейтинг: 0 / 0
04.04.2003, 10:21
    #32133300
nikita
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
CHAGOSERG

Мне как раз и нужно создать из VFP третью таблицу на сервере
из двух таблиц на том же сервере, но что-то не получается!
Может это ограничение VFP 6.O ?
...
Рейтинг: 0 / 0
04.04.2003, 11:15
    #32133370
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
А мож это твоё ограничение? Тебе ж сказали: то что ты делаеш - неправильно. Тебе нужно выполнить что-то вроде select ... from ... into table ...
или что-то подобное, в хелпе от мс скл смотри.
...
Рейтинг: 0 / 0
04.04.2003, 11:30
    #32133396
chagoserg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
первое действие:
создаёшь таблицу в БД
lcSQLcommand="CREATE TABLE mytab(....)"
sqlexec(ncnnct,lcSQLcommand)

второе действие:
вставляешь записи в неё согласно твоего условия
lcSQLcommand="INSERT into mytab (...) SELECT .... FROM .... WHERE ..."
sqlexec(ncnnct,lcSQLcommand)

тип параметров, передаваемых из VFP (те, что после ?) должен соответствовать типу данных на сервере
...
Рейтинг: 0 / 0
04.04.2003, 11:53
    #32133431
nikita
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
ОТВЕТ CHAGOSERG

В том то и дело, что хотел сохранить запрос-ТABLE в массиве переменных, как указано на возможность в HELP( так как сохранить на
сервере в виде TABLE HELPом не позволяется ). Сложный (вложенный) запрос

ncnnct=0
public perem3
perem2='2050/01/01'
ncnnct=sqlconnect('resource')
SQLEXEC(ncnnct,'create table DATARESU (id_usr INT,vid INT)')
mcomm=' '
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+')'
sqlexec(ncnnct,mcomm)
?aerror()
sqlexec(ncnnct,'select * from DATARESU')
BROW
sqldisconnect(ncnnct)

дает ошибку VFP 'Too few arguments'.
А простой insert, отмеченный *** идет спокойно.
Может это ограничение VFP 6.0?
И никак его обойти не могу!
Мне и надо то из двух TABLE сформировать на сервере же третью
TABLE, но делать это из VFP!

Никак не получается простое "чайное" дело!
...
Рейтинг: 0 / 0
04.04.2003, 12:05
    #32133449
chagoserg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
мда... посмотри почту
это первое ;)
второе - в строке запроса нужно соблюдать расстановку и пробелов тоже
...
Рейтинг: 0 / 0
04.04.2003, 12:47
    #32133507
nikita
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
CHAGOSERG

Не могу общаться по ICQ!
Не установлен.
...
Рейтинг: 0 / 0
04.04.2003, 13:05
    #32133535
chagoserg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
что же с вами с певцами делать... (с) Масяня :)
в аналайзере у тебя всё это отрабатывает?

mcomm="insert into DATARESU(id_usr,vid) "
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"
обрати внимание на пробелы и на отсутствие скобки которая у тебя стоит в конце строки
...
Рейтинг: 0 / 0
04.04.2003, 16:33
    #32133827
nikita
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
CHAGOSERGу

Вот такой запрос проходит в SQL Query Analyzer:

drop table DATARESU
GO
create table DATARESU (id_usr int, vid smallint)
go
insert into DATARESU (id_usr,vid)
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='2050/01/01'

GO
select * from DATARESU

а такая программка в VFP не проходит:

ncnnct=0
public perem3
perem3='2050/01/01'
ncnnct=sqlconnect('cheboks')
sqlexec(ncnnct,' delete from DATARESU ')
sqlexec(ncnnct,"insert into DATARESU (id_usr,vid) ;
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=?perem3' ")
sqlexec(ncnnct,' select * from DATARESU')
?aerror()
BROW
sqldisconnect(ncnnct)

хоть ты тресни!
На INSERT дает VFP ошибку "непонятная фраза".
...
Рейтинг: 0 / 0
04.04.2003, 16:41
    #32133834
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
Мне сейчас плохо станет. После

and (b.vid=131 or b.vid=181 or b.vid=585 or b.vid=591)

нет точки с запятой.
...
Рейтинг: 0 / 0
04.04.2003, 16:42
    #32133836
.
.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
sqlexec(ncnnct,"insert into DATARESU (id_usr,vid) ;
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=?perem3 ' ")


sqlexec(ncnnct,"insert into DATARESU (id_usr,vid) ;
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=?perem3")
...
Рейтинг: 0 / 0
04.04.2003, 17:42
    #32133903
chagoserg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
во весело
этак мы будем на 10 страницах все точки-запятые-пробелы-кавычки разжёвывать
...
Рейтинг: 0 / 0
07.04.2003, 09:11
    #32134342
nikita
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
Всем спасибо!
Еще раз вашей помощью убедился, что проблемы "ЧАЙНИКА"-
его собственные ошибки!
...
Рейтинг: 0 / 0
07.04.2003, 10:43
    #32134410
nikita
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
ТОЧНЕЕ: запрос
INSERT INTO mytable3
SELECT FROM mytable1,mytable2
ИМЕВШЕЙСЯ В МОЕМ РАСПОРЯЖЕНИИ ДОКУМЕНТАЦИЕЙ,
А ТОЧНЕЕ HELPом не был предусмотрен.
За просвещение - спасибо.
...
Рейтинг: 0 / 0
11.04.2003, 10:00
    #32138184
alexia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Манипуляции таблицами SQL из VisualFoxPro
Попробуй вместо

sqlexec(ncnnct,"insert into DATARESU (id_usr,vid) ;
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=?perem3")

написать

sqlexec(ncnnct,"insert into DATARESU (id_usr,vid) ;
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=''" + DTOC (perem3, 1) + "''")
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Манипуляции таблицами SQL из VisualFoxPro / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]