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

Вниз

Как определить, что использовать ExecSQL или Open   Найти похожие ветки 

 
Alex_R   (2002-03-01 18:02) [0]

Привет всем.
В принципе понятно, Если Select, то Open, Если insert, update,
delete или еше фиг знает что, то ExecSQL.
А вот как работает SQL Explorer, я же ему не говорю,
каким методом выполнить.

Где-то видел вариант типа

try
Query.Open;
except
Query.ExecSql;
end;


Только так и ни как иначе? В принципе, если в селекте глюк, то,
ошибка, и после ExecSQL тоже вроде верная.
Просто хочется уточнить.

Заранее спасибо.


 
AlexR_R   (2002-03-01 18:11) [1]

А хуже всего то, что если создаем таблицу,
то Query.Open создает ее и дальше фалтует,
а после этого фалтует и ExecSQL!


Query.SQL.Add("create table qqq3 (ID int)");
try
Query.Open; //Таблица создалась, но фолт на создании курсора.
except
Query.ExecSql;// Такая таблица уже есть!
end;




 
SVM   (2002-03-01 18:14) [2]

>В принципе понятно, Если Select, то Open, Если insert, update,
>delete или еше фиг знает что, то ExecSQL.

Не еще фиг знает что, а только Insert, Update, Delete.
Select - на выборку.

Если учесть, что все слова шестибуквенные, то какие проблемы?

QueryWord=Copy(Trim(SQLText), 1, 6);
if AnsiCompareText(QueryWord,"Select")=0 then Open
else
if AnsiCompareText(QueryWord,"Update")=0
or
..
or
..
then ExecSQL
else raise Exception....


 
alexandervasjuk   (2002-03-01 18:15) [3]

вот что на ум пришло:

1. if pos("SELECT", uppercase(Query.SQL.Text)) <> 0
then Query.Open
else Query.ExecSQL;

2. prepare
if fieldcount <> 0 then...

3. prepare
... if params[i].paramtype = ptOutput then ...



 
Val   (2002-03-01 18:19) [4]

придется, скорее всего, делать анализ текста на наличие select и тогда уже выполнять Open, если собрались делать собственный SQLляляля


 
AlexR_R   (2002-03-01 18:31) [5]


В принципе проблем-то никаких. Единственнй гимор который мне видится -- это коментарии, особенно типа /* .... */.
Хотя это конечно тоже лечится. Я думал может кто знает
умный способ..

2SVM
>>Не еще фиг знает что, а только Insert, Update, Delete
фиг знает что -- это Create, exec и т.д.


 
AlexR_R   (2002-03-01 18:34) [6]

А еще в MS SQL есть Select into NewTable.


 
alexandervasjuk   (2002-03-01 18:56) [7]

SVM
а еще есть alter... set generator...

всем:
так как насчет prepare; fieldcount?


 
Val   (2002-03-01 18:58) [8]

Тут недавно Alexandr выкладывал в кладовку компонент для написания и обработки скриптов к IB, гляньте, может с исходниками.


 
alex_R   (2002-03-01 19:21) [9]

2alexandervasjuk ©
Prepare тоже похоже не проходит.
После него Fields.Count как был равным нулю, так и остался.


 
Bachin   (2002-03-02 13:43) [10]

А потом будешь долго удивляться, почему "execute procedure proc1" не возвращает значения :(


 
[NIKEL]   (2002-03-02 15:50) [11]

2alexandervasjuk © (01.03.02 18:15)

а если там будет такое как GRANT SELECT, DELETE...или REVOKE SELECT, DELETE ?? на это тоже надо проверку делать

хотя это зависит что делает эта программа, если пишеться клиент на подобе WISQL, то адо много чего учитывать :)


 
Александр Спелицин   (2002-03-03 15:32) [12]

Что сразу хочется отметить:
1. Если запрос не возвращает набора данных, то конструкция
try
Query.Open;
except
Query.ExecSql;
end;

выполнит этот запрос ДВАЖДЫ!!!

2. Вариант с анализом текста SQL запроса. Предславьте себе, что у Вас на SQL сервере есть 2 процедуры Proc1 и Proc2. Первая возвращает набор данных, а вторая нет (например, только что-то добавляет в одну из таблиц базы). Будете анализировать текст процедуры ???
3. ...

В такой ситуации надо использовать средства используемого Вами механизма доступа к данным. Так в BDE возникает исключительная ситуация ENoResultSet. И код для случая использования BDE будет таким:

try
Query.Open;
except
on E: ENoResultSet do
begin
// Просто пустой блок, чтобы не "пропустить" исключение
// дальше
end
else
// А это для всех остальных случаев.
Raise;
end;


Для случая использования ADO, DBExpress или еще какого-либо механизма, надо смотреть документацию, исходники или просто пройтись отладчиком по программе.


 
Alex_R   (2002-03-04 14:16) [13]

2Александр Спелицин
Thanks.
Я думаю последнее -- это как раз то, что надо.
Наверно и SQL Explorer примерно так работает.




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

Форум: "Базы";
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
3-90767
Demon ltd
2002-03-02 00:00
2002.03.28
Удаление из таблиц


1-90937
Елена
2002-03-13 15:35
2002.03.28
Внешняя исключительная ситуация


6-91017
Surf
2002-01-06 09:55
2002.03.28
Ладно, спрошу по-другому.


14-91052
DeZ
2002-02-14 09:26
2002.03.28
Help me!!!


6-91014
vlad_12
2002-01-15 14:17
2002.03.28
Кто шарит по моему компу





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский