Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

Проблема с созданием хранимой процедуры в MS SQL   Найти похожие ветки 

 
dreamse   (2005-10-07 09:32) [0]

Встала проблема создания динамически хранимой процедуры :

Использую код :


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.

Как переключиться на базу кодом и при этом создать процедуру ? Нужно всё в одном листинге произвести , то есть сразу а не последовательно


 
Rob   (2005-10-07 09:55) [1]

Если процедура формируется динамически, то можно сделать так:

var BazeName: string
...................................

BazeName:="MyBaze";
........................................
Query1.SQL.Add("Insert Into "+MyBaze+"..GuestBook...........


 
dreamse   (2005-10-07 10:01) [2]

> Rob   (07.10.05 09:55) [1]

Это я понимаю , но проблема в том что я не знаю какой скрипт будет загружен , т.е для работы какой базы , по этому не могу определить.

Нужно просто грузить файл и выполняьть скрипт...

Может специфика кода другая ?


 
stone ©   (2005-10-07 10:10) [3]

Параметры подключения к базе устанавливаются в TADOConnection.ConnectionString или в TADOCommand.ConnectionString


 
Rob   (2005-10-07 10:11) [4]

Ну можно попробовать так: (пример для BDE, но суть - одна)

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("use "+MyBaze);
Query1.ExecSQL;

И только после этого:

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("CREATE PROCEDURE AddDataBook ...................


 
dreamse   (2005-10-07 10:18) [5]

хм .. опишу ещё раз :

Я не знаю с какой базой работаю ! Я просто подключаюсь к серверу , скрипт должен сам переключаться на базу и работать с ней ... в данном случае создавать хранимую процедуру

Но синтаксис ADOCommand не хочет работать с этим , использовать же Query я не могу по ряду причин


 
Rob   (2005-10-07 10:27) [6]

Насколько я понимаю, если просто выполнить сей скрипт в той базе, которая указана в ConnectionString, то SP там и создастся....


 
stone ©   (2005-10-07 10:42) [7]


> Rob   (07.10.05 10:27) [6]

Да


 
sniknik ©   (2005-10-07 10:44) [8]

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) будут один в один подходить для твоей проги.


 
dreamse   (2005-10-07 11:17) [9]

sniknik ©   (07.10.05 10:44) [8]

Не спорю , в Query Analizer-е выполняеться без проблем , на Delphi же выдаёт :

> Line 3: Incorrect syntax near "GO"

Всё таки наверно придёться делать отдельную процедуру для запуска скриптов создания процедур


 
sniknik ©   (2005-10-07 11:28) [10]

>> Line 3: Incorrect syntax near "GO"
естественно! это тег самого QA, для разбиения (и выполнения) логических блоков отдельно.
ты все видать в одну команду впихнул. а надо по тегу делить на блоки и выполнять последовательно по аналогии с QA.


 
dreamse   (2005-10-07 12:15) [11]

> sniknik ©   (07.10.05 11:28) [10]

К сожалению не понимаю как это можно сделать использовав обычную загрузку с txt. Парсить весь код ? Тоже вариант , только надо ли ? Ведь выполнять построчную обработку файла всё таки долго код писать :(

Но скорей всего так и придёться делать. Если есть какое нибудь решение разбития кода на блоки то если можно подскажите


 
Fay ©   (2005-10-07 22:24) [12]

2 dreamse   (07.10.05 12:15) [11]
Возьми весь код. Визуально раздели на блоки и запиши по-русски алгоритм, который применил. Перепиши на Delphi.



Страницы: 1 вся ветка

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
1-1130312278
sergg
2005-10-26 11:37
2005.11.20
Измение размера двумерного VarArray


4-1126989851
NikNet
2005-09-18 00:44
2005.11.20
Запрет на выключение/перезагрузки, компьютера


2-1130678159
тт
2005-10-30 16:15
2005.11.20
Как узнать ширину экрана в сантиметрах?


14-1130305048
SergP.
2005-10-26 09:37
2005.11.20
СПАМ. Что делать?


2-1130774205
Leech
2005-10-31 18:56
2005.11.20
OnMouse...