![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с созданием хранимой процедуры в MS SQL [D6, MSSQL]
dreamse © (2005-10-07 09:32:00)Встала проблема создания динамически хранимой процедуры :
Использую код :
CREATE PROCEDURE AddDataBook (@DateTime varChar(10), @ipcomp varChar(10), @status varChar(20),@caption varChar(100),@text varChar(500),@statusico varChar(10))
AS
Insert Into GuestBook
Values (@DateTime,@ipcomp,@status,@caption,@text,@statusico)
Если вставить с ADOCommand то работает на ура
Проблема в следующем при использовании кода нужно сначала выбрать базу ( так как это всё динамически то не получаеться задать код в процесе проэктировки программы , и не известно база есть или нет и поэтому нужно всё сразу в коде писать , например в текстовике а потом его подгружать и выполнять )
Если перед вышепреведёным кодом вставить комманду переключения базы данных например
use mybase
То Delphi ругаеться : 'CREATE PROCEDURE' must be the first statement in a query batch
Типа первая строка должнать быть 'CREATE PROCEDURE' баз никаких там use mybase.
Как переключиться на базу кодом и при этом создать процедуру ? Нужно всё в одном листинге произвести , то есть сразу а не последовательно
Fay (2005-10-07 22:24:00) [1]2 dreamse (07.10.05 12:15) [11]
Возьми весь код. Визуально раздели на блоки и запиши по-русски алгоритм, который применил. Перепиши на Delphi.
dreamse (2005-10-07 12:15:00) [2]> sniknik © (07.10.05 11:28) [10]
К сожалению не понимаю как это можно сделать использовав обычную загрузку с txt. Парсить весь код ? Тоже вариант , только надо ли ? Ведь выполнять построчную обработку файла всё таки долго код писать :(
Но скорей всего так и придёться делать. Если есть какое нибудь решение разбития кода на блоки то если можно подскажите
sniknik (2005-10-07 11:28:00) [3]>> Line 3: Incorrect syntax near 'GO'
естественно! это тег самого QA, для разбиения (и выполнения) логических блоков отдельно.
ты все видать в одну команду впихнул. а надо по тегу делить на блоки и выполнять последовательно по аналогии с QA.
dreamse (2005-10-07 11:17:00) [4]sniknik © (07.10.05 10:44) [8]
Не спорю , в Query Analizer-е выполняеться без проблем , на Delphi же выдаёт :
> Line 3: Incorrect syntax near 'GO'
Всё таки наверно придёться делать отдельную процедуру для запуска скриптов создания процедур
sniknik (2005-10-07 10:44:00) [5]use mybase
GO
CREATE PROCEDURE AddDataBook (@DateTime varChar(10), @ipcomp varChar(10), @status varChar(20),@caption varChar(100),@text varChar(500),@statusico varChar(10))
AS
Insert Into GuestBook
Values (@DateTime,@ipcomp,@status,@caption,@text,@statusico)
так эта "проблема" решается в Query Analizer-е, разбиением скрипта на логические блоки. сделай также. + ко всему тогда скрипты от QA(/сгенеренные IE) будут один в один подходить для твоей проги.
stone (2005-10-07 10:42:00) [6]
> Rob (07.10.05 10:27) [6]
Да
Rob (2005-10-07 10:27:00) [7]Насколько я понимаю, если просто выполнить сей скрипт в той базе, которая указана в ConnectionString, то SP там и создастся....
dreamse (2005-10-07 10:18:00) [8]хм .. опишу ещё раз :
Я не знаю с какой базой работаю ! Я просто подключаюсь к серверу , скрипт должен сам переключаться на базу и работать с ней ... в данном случае создавать хранимую процедуру
Но синтаксис ADOCommand не хочет работать с этим , использовать же Query я не могу по ряду причин
Rob (2005-10-07 10:11:00) [9]Ну можно попробовать так: (пример для BDE, но суть - одна)
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('use '+MyBaze);
Query1.ExecSQL;
И только после этого:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('CREATE PROCEDURE AddDataBook ...................
stone (2005-10-07 10:10:00) [10]Параметры подключения к базе устанавливаются в TADOConnection.ConnectionString или в TADOCommand.ConnectionString
dreamse (2005-10-07 10:01:00) [11]> Rob (07.10.05 09:55) [1]
Это я понимаю , но проблема в том что я не знаю какой скрипт будет загружен , т.е для работы какой базы , по этому не могу определить.
Нужно просто грузить файл и выполняьть скрипт...
Может специфика кода другая ?
Rob (2005-10-07 09:55:00) [12]Если процедура формируется динамически, то можно сделать так:
var BazeName: string
...................................
BazeName:='MyBaze';
........................................
Query1.SQL.Add('Insert Into '+MyBaze+'..GuestBook...........