Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 запуск запроса в sql базе  [new]
Viart
Member

Откуда:
Сообщений: 21
Помогите пожалуйста.
Ситуация такая.
Несколько запросов с параметрами param_num и param_date в виде блока программы записаны в мемо поле SQL базы.
например: dbo.base1.fiel_mem

Вопрос: Как из фокс про запустить этот блок с передачей туда параметров и забрать оттуда результат в виде таблицы.

есть еще вариант, что весь блок программы написанный для sql хранится в переменной фоксы mem_text. Как этот блок запустить из переменной на sql сервере ?
10 дек 12, 16:16    [13607763]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Ffffffffffffffff
Guest
F1 - sqlexec()
10 дек 12, 16:25    [13607864]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Viart
Member

Откуда:
Сообщений: 21
Ffffffffffffffff
F1 - sqlexec()

Покажите синтаксис, если там блок программы состоящий из кучи запросов, создания темповых таблиц и т.д.
Простые запросы да, работают, а блок программы - нет.
10 дек 12, 16:31    [13607971]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Jonny540
Member

Откуда:
Сообщений: 727
Viart,

Вытащи из мемо-поля в строку и подставь ее в SQLEXEC.
10 дек 12, 16:48    [13608120]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Viart
Member

Откуда:
Сообщений: 21
я не силен в sql, поэтому и спрашиваю
подскажите синтаксис, чтобы запустить и блок из переменной , и параметры, и указать куда выгрузить результат. В хелпах не нашел.
10 дек 12, 16:57    [13608194]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Ffffffffffffffff
Guest
Команды блока должны быть разделены символом ;. Все остальное - так же, как и с одной командой. Примеры SQLExec с параметрами есть в Хелпе.
Не совсем понятно, как блок без заполненных параметрови может храниться в переменной.
10 дек 12, 17:03    [13608260]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Jonny540
Member

Откуда:
Сообщений: 727
Ffffffffffffffff
Не совсем понятно, как блок без заполненных параметрови может храниться в переменной.
Ну хранится там строка, где есть к-либо имена переменных (параметров).
Перед стартом sqlexec им присваиваются к-либо значения...
10 дек 12, 17:06    [13608287]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Ffffffffffffffff
Guest
Пусть автор лучше приведет пример.
10 дек 12, 17:11    [13608324]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Jonny540
Member

Откуда:
Сообщений: 727
Viart
я не силен в sql, поэтому и спрашиваю
подскажите синтаксис, чтобы запустить и блок из переменной , и параметры, и указать куда выгрузить результат. В хелпах не нашел.
Почему по форуму не поискал? читай, допиливай самостоятельно.
10 дек 12, 17:20    [13608397]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Viart
Member

Откуда:
Сообщений: 21
вот маленький кусочек:

create table #tmp ( имена полей )

insert into #tmp
select поля
from таблица where ...date=@@@param_date and ...

declare @mem1
...
begin
select top 1 ...

SET @CMD = 'alter table #tmp ' +
...

EXECUTE(@CMD)

select * from #tmp - здесь вывод результата.

все это хранится в мемо поле одной из записи
как из фокспро это запустить?
Как ни пробую, не получается.
10 дек 12, 17:24    [13608427]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Дед Евгений
Member

Откуда: Московская область
Сообщений: 118
*/bdConn Номер соединения с сервером

m.cursor = "TempCursor" && Имя сурсора, если суда будет формироваться ответ сервера
m.sqlval = <Имя таблицы>.<Имя поля Memo> && Строка запроса из мемо-поля

mmm = SQLEXEC(bdConn, m.sqlval, m.cursor)
10 дек 12, 17:34    [13608489]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Ffffffffffffffff
Guest
Как вы предполагаете параметры заменять значениями?
10 дек 12, 17:38    [13608515]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Viart
Member

Откуда:
Сообщений: 21
Дед Евгений
*/bdConn Номер соединения с сервером

m.cursor = "TempCursor" && Имя сурсора, если суда будет формироваться ответ сервера
m.sqlval = <Имя таблицы>.<Имя поля Memo> && Строка запроса из мемо-поля

mmm = SQLEXEC(bdConn, m.sqlval, m.cursor)


bdConn Номер соединения с сервером - это ясно

m.cursor = "TempCursor" - с этим тоже понятно

m.sqlval = <Имя таблицы>.<Имя поля Memo> && Строка запроса из мемо-поля

здесь чтобы запустить мемо поле , его еще надо найти - Select * from dbo.ttt where dbo.ttt.id=aaa

mmm = SQLEXEC(bdConn, m.sqlval, m.cursor) - а как туда передать параметры?
10 дек 12, 17:43    [13608556]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Ffffffffffffffff
Guest
Туда - никак.
10 дек 12, 17:51    [13608648]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1547
Viart
как из фокспро это запустить?
Как ни пробую, не получается.
Как пробовали?
Вместо
from таблица where ...date=@@@param_date and ...

напишите
from таблица where ...date=?Переменная_со_значением_параметра and ...

Надеюсь, догадаетесь что надо поставить вместо слова Переменная_со_значением_параметра?
10 дек 12, 22:20    [13609735]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Viart
Member

Откуда:
Сообщений: 21
Пробовал по разному.
По моему фокс просто не прожевывает синтаксис SQL,
и вторая причина , нашел в одном из хелпов, длина выражения в SQLEXEC() должна быть не более 255 символов,
а блок в мемо поле там наааааамного больше.

Тут надо типа SQLEXEC( exec ..... или call .... )
кто знает подскажите.
11 дек 12, 09:17    [13610506]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
правильный проходящий :)
Guest
Viart
Пробовал по разному.
Прелестно. И все пробы были правильными? А Вы знаете эти правильные способы? И мы их все должны угадать?
По моему фокс просто не прожевывает синтаксис SQL,
А что это такое - синтаксис SQL? Где такой термин увидели? С каких пор у SQL появился один синтаксис? А фоксовый диалект языка SQL не пробовали изучить, а не изобретать или пытаться использховать какой-то другой?
и вторая причина , нашел в одном из хелпов, длина выражения в SQLEXEC() должна быть не более 255 символов,
Чушь. Ни в одном из хелпов такого нет.
а блок в мемо поле там наааааамного больше.
Ну и что?

Тут надо типа SQLEXEC( exec ..... или call .... )
кто знает подскажите.
Уже подсказали. Читать не пробовали?
11 дек 12, 09:27    [13610533]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Viart
Member

Откуда:
Сообщений: 21
правильный проходящий :)
Я попросил помочь, а не умничать, не знаешь, проходи мимо.
11 дек 12, 09:40    [13610561]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Станислав С...кий
Guest
Viart,
Не понимаю, зачем хранимые процедуры хранить в мемо - полях?
Не лучше ли хранить их в том виде, в каком им и положено быть - в виде хранимых процедур на сервере. И уже в таком виде их вызывать... передавая в них только параметры... И не тянуть все на клиента, чтобы потом отсылать обратно на сервер...

Либо, если уж Вам так хочется, напишите хранимую процедуру - оболочку ("фабрику" в терминах С++), которая будет выполнять то, что вы хотите сделать: читать данные с мемо-поля, формировать необходимые команды, передавать необходимые параметры и т.д.
Только она будет работать на сервере... А вы ей будете управлять через SqlExec()...
11 дек 12, 09:46    [13610583]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Viart
Member

Откуда:
Сообщений: 21
Все не так просто.
Есть большой программный комплекс, покупной, в нем есть мастер запросов, который сам все сочиняет и постоянно это переписывает, хранится все это в мемо полях, т.е. изменять под себя эти блоки я не могу. Нужно написать прогу, которая запускала бы эти процессы по моему расписанию и сама сохраняла результаты. вручную все это просто очень муторно.
Вот и вся задача.
Кто подскажет? Я не очень силен во всем этом.
11 дек 12, 10:01    [13610663]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Станислав С...кий
Guest
Viart,
Тогда выход только один. Пишите хранимую процедуру (функцию) на сервере и всю работу (поиск записи, из которой читается мемо-поле, формирование команд для запуска, передачу параметров и т.д.) выполняйте в ней. На клиента - передавайте уже результат работы...
Делов-то. Только выучить T-SQL... :-)))
Или поищите подобную функцию среди хранимых процедур / функций Вашего программного комплекса... Наверняка есть похожий модуль...
11 дек 12, 10:37    [13610907]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Viart
Member

Откуда:
Сообщений: 21
Да, наверное что то подобное и придется делать.
Спасибо за совет. Примерно в этом направлении и шел.
11 дек 12, 10:50    [13610990]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1547
Viart
правильный проходящий :)
Я попросил помочь, а не умничать, не знаешь, проходи мимо.
Что такое умничать? А что, лучше глупничать и нести чушь как некоторые? Мы таки увидим конкретику или будем обсуждать сферического коня в вакууме?
11 дек 12, 11:46    [13611388]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Станислав С...кий
Guest
Sergey Sizov
Мы таки увидим конкретику или ...

Так была же "конкретика"...
Например, вот:
Viart
Есть большой программный комплекс, покупной, в нем есть мастер запросов, который сам все сочиняет и постоянно это переписывает, хранится все это в мемо полях, т.е. изменять под себя эти блоки я не могу. Нужно написать прогу, которая запускала бы эти процессы по моему расписанию и сама сохраняла результаты. вручную все это просто очень муторно.
Вот и вся задача.
Кто подскажет? Я не очень силен во всем этом.
11 дек 12, 12:04    [13611531]     Ответить | Цитировать Сообщить модератору
 Re: запуск запроса в sql базе  [new]
Станислав С...кий
Guest
Viart
Пробовал по разному.
нашел в одном из хелпов, длина выражения в SQLEXEC() должна быть не более 255 символов,

Вы этот хелп немного не правильно поняли... Да, на самом деле там сказано:
Help
...check to see if it exceeds the maximum length of a string literal in Visual FoxPro, which is 255 characters. Longer strings will cause a "Command contains unrecognized phrase/keyword" error. However, you can pass long SQL statements if you break them up into several concatenated literals...

Т.е. длина выражения должна быть не более 255 символов. Но, если это таки произошло, Вы можете разбить длинную строку на несколько строк меньшего размера и объединить их в SqlExec()...
11 дек 12, 12:14    [13611602]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / FoxPro, Visual FoxPro Ответить