Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

Проблема с созданием хранимой процедуры в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.091 c
14-1130333575
Андрей Жук
2005-10-26 17:32
2005.11.20
А как (чем) мыслит человек?


14-1130798937
-=XxX=-
2005-11-01 01:48
2005.11.20
Шотландская волынка


3-1128673276
Kacnep
2005-10-07 12:21
2005.11.20
Последовательное открытие в АДОTABLE нескольких таблиц.


1-1130321591
Prohodil Mimo
2005-10-26 14:13
2005.11.20
Как добавлять VCL (Win32) компоненты в Delphi 2005?


2-1130834702
бедный студент
2005-11-01 11:45
2005.11.20
Перетаскивание фигуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский