Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для ProRockX
263 / 109 / 26
Регистрация: 16.03.2013
Сообщений: 272

Обработка select и выполнение скриптов на одной кнопке

27.03.2013, 21:47. Показов 1928. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Очень нужна помощь.
Работаю с oracle 10g xe через компонет odac. Пишу небольшую программулину, которая будет позволять просматривать, редактировать некоторые объекты бд. Остановился на создании sql -редактора.
В нём 2 кнопки, "запуск скрипта" и "запуск select". На первую из них повесил код
Pascal
1
2
  OraScript1.SQL.Text:=memo1.Lines.Text;
  OraScript1.Execute;
а на вторую:
Pascal
1
2
3
OraQuery.SQL.Text :=Memo1.Lines.Text;
OraQuery.Close;
OraQuery.Open;
всё работает отлично - пакеты введённые в memo1 благополучно создаются, данные select возвращаются в дбгрид.

Но для пользователя это не удобно.
Нужно оставить 1 кнопку а функционал должен быть такой же.
Начал писать обработчик, который будет проверять, является ли введённый в мемо тект select'ом и на этом застрял.

Собственно вопрос: может можно как-то проще решить проблему? Или всё таки без обработчика никуда? Может у кого-то есть пример?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2013, 21:47
Ответы с готовыми решениями:

Выполнение двух действий на одной кнопке
Можно ли сделать выполнение с начало одной команды, а потом второй на одной кнопке. Добавлено через 2 минуты Т.е. я добавляю новую...

Выполнение скриптов
Доброго времени всем. Есь такая проблема. Есть приложение, работающее под MS SQL Server 2005. Подскажите как реализовать возможность...

Параллельное выполнение скриптов
Здравствуйте, столкнулся с проблемой. Как начинающий программист стараюсь писать всё, что взбредёт на ум. В общем ситуация такая. Имеется...

11
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
27.03.2013, 22:15
Цитата Сообщение от ProRockX Посмотреть сообщение
является ли введённый в мемо тект select'ом
Очевидно же - если первым словом текста sql-предложения является слово "select", то это запрос на выборку.
0
 Аватар для ProRockX
263 / 109 / 26
Регистрация: 16.03.2013
Сообщений: 272
27.03.2013, 22:36  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Очевидно же - если первым словом текста sql-предложения является слово "select", то это запрос на выборку.
я это понимаю, но нужно учитывать что если ввели в memo текст с комментариями подобный этому:
Pascal
1
2
3
--update
select * 
from t_product
или
Pascal
1
2
/*delete
from t_partner*/ select * from t_product
то это тоже запросы на выборку, просто части кода заремлены. Вот это всё пытаюсь учитавать и получается неслабая ветка if'ов. Вот и интересуюсь можно ли это сделать как-то проще?
0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
28.03.2013, 05:35
Ну так проверяй строки если есть строки начинающиеся с "--", то их пропускаешь.
Если "/*", то ищешь закрывающий "*/" и смотришь, что после него.
А чем вас PL/SQL Developer не устраивает? Ну по мимо платы.
Есть бесплатный dbForge Studio for Oracle.
Или у вас пользаки SQL изучают? Не боитесь?
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
28.03.2013, 09:41
Цитата Сообщение от rdama
А чем вас PL/SQL Developer не устраивает? Ну по мимо платы.
Есть бесплатный dbForge Studio for Oracle.
Завсегда в поставке Oracle присутствовал SQL*Plus. А в последние годы появился SQL Developer, который находится в бесплатной скачке на оф. сайте. Зачем делать еще один, ухудшенный вариант?
0
28.03.2013, 09:53

Не по теме:

Grossmeister, ну я давненько привык к PL/SQL Developer.
А SQL*Plus сугубо для скриптов. Дергать им выборки как-то извратненько, и разработкой заниматься тоже.
Или вы так в дополнение. А SQL Developer это который истинно оракловый. Чего-то, как-то я его не победил. А еще есть любимая всеми оракловыми админами Жаба.

0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
28.03.2013, 11:05
Цитата Сообщение от rdama

Не по теме:

Grossmeister, ну я давненько привык к PL/SQL Developer.

Не по теме:

Я тоже. Хотя начинал с SQL Navigator



Цитата Сообщение от rdama

Не по теме:

А SQL*Plus сугубо для скриптов. Дергать им выборки как-то извратненько, и разработкой заниматься тоже.

Не по теме:

Это да, но для некоторых административных действий вполне годится. Набрать ALER SYSTEM или SHUTDOWN IMMEDIATE несложно



Цитата Сообщение от rdama

Не по теме:

А SQL Developer это который истинно оракловый. Чего-то, как-то я его не победил.

Не по теме:

А многие пользуют. Кстати, регулярно выходят новые версии



Цитата Сообщение от rdama

Не по теме:

А еще есть любимая всеми оракловыми админами Жаба.

Не по теме:

Ну не-е-ет. Я ее смотрел 2 раза (разные версии) - не завлекла ни разу. Для администрирования - либо PL/SQL Dev, либо SQL*Plus

0
 Аватар для ProRockX
263 / 109 / 26
Регистрация: 16.03.2013
Сообщений: 272
28.03.2013, 22:24  [ТС]
С проблемой вчера справился, пойдя тем же путём, что сказал rdama. Всем спасибо за поддержку! Программулю писал не для обычных юзеров, а для техподдержки нашей фирмы. Просто прога должна была работать в директ моде (без оракл клиента) и должна была выполнять простейшие функции (немного подправить пакет или вьюху, запустить селект, отключить тригер и тд), а самое главное мало весить, чтоб можно было быстро передать по инету.
Ну и, собственно, программировать только учусь, поэтому разработка её была - хорошей практикой по делфе.
0
 Аватар для ProRockX
263 / 109 / 26
Регистрация: 16.03.2013
Сообщений: 272
30.03.2013, 11:37  [ТС]
Кстати, если вдруг кому понадобится подобная проверка вот она (правда может немного не оптимизирована):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
procedure TfmMain.tbOpenClick(Sender: TObject);
begin
if opendialog1.Execute then
  memo1.Lines.LoadFromFile(opendialog1.FileName);
  memo1.ReadOnly := false;
end;
 
procedure TfmMain.tbRunScriptClick(Sender: TObject);
  var
  i: integer;
  a:integer;
  typerun:string;//что запускается select или скрипт
  temptext: tstringlist;
  skob: integer; //найденна ли открытая скобка  /*
begin
  temptext := tstringlist.Create;
  temptext.text:= memo1.Lines.Text;
  skob :=0;
  for i:=0 to temptext.Count-1 do
    begin
     if trim(temptext.Strings[i]) = '' then continue
     else
        if (copy(trim(temptext.Strings[i]), 0, 2) = '--') and (skob=0) then continue
        else
            if (copy(trim(temptext.Strings[i]),0,2) <> '/*') and (skob=0) then
              begin
               if copy(uppercase(trim(temptext.Strings[i])),1,6) = 'SELECT' then
                   typerun:='SELECT'
               else
                   typerun:='SCRIPT';
                break;
              end
            else //т.е.если запрос начинается с /*, то ищем закрывающую */
            begin
              skob:=1;
            if  pos('*/', temptext.Strings[i])=0 then continue
             else
              begin
                a:= pos('*/', temptext.Strings[i])+2;
                if trim(copy(temptext.Strings[i], a, length(temptext.Strings[i])-a)) = '' then
                  begin
                  skob:=0;
                  continue;
                  end
                else
                  begin
                    if copy(uppercase(trim(copy(temptext.Strings[i], a, length(temptext.Strings[i])-a))),0,6) = 'SELECT' then
                    typerun:='SELECT'
                    else
                    typerun:='SCRIPT';
                  break;
                  end;
              end;
            end;
    end;
    if cbox.Checked=true then showmessage(typerun);
 
    if typerun = 'SELECT' then
      begin
        qZapros.SQL.Text := memo1.Lines.Text;
        qZapros.Close;
        qZapros.Open;
      end;
    if typerun = 'SCRIPT' then
      begin
        OraScript1.SQL.Text:=memo1.Lines.Text;
        OraScript1.Execute
      end;
     temptext.Free;
end;
0
 Аватар для ProRockX
263 / 109 / 26
Регистрация: 16.03.2013
Сообщений: 272
17.09.2015, 20:14  [ТС]
Прошло два года, левой пяткой дописывал программу, когда было время) И недавно узнал, что есть способ гораздо проще узнать, что находится в TMemo - select, update, insert или plsql. Наткнулся на него, когда читал доку по ODAC.
У TORAQuery есть замечательное свойство SQLType, которое и возвращает тип выполняемых данных.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function TfrSQL.fn_decode_sqltype : string;
begin
  OraQuery1.Close;
  OraQuery1.SQL.Text := Memo1.text;
  OraQuery1.Prepare;
  case  OraQuery1.SQLType of
    3: result:= 'INSERT';
    4: result:= 'SELECT';
    5: result:= 'UPDATE';
    9 : result:= 'DELETE';
    34 : result:= 'PLSQL'
  else
    result:= 'PLSQL';
  end;
end;
Не зря умные люди часто советуют - читайте документацию)
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
18.09.2015, 00:37
Цитата Сообщение от ProRockX Посмотреть сообщение
Прошло два года, левой пяткой дописывал программу, когда было время) И недавно узнал, что есть способ гораздо проще узнать, что находится в TMemo - select, update, insert или plsql. Наткнулся на него, когда читал доку по ODAC.
У TORAQuery есть замечательное свойство SQLType, которое и возвращает тип выполняемых данных.
Нет слов. Два года писать программу левой пяткой вместо того чтобы воспользоваться первым же ответом в топике!
"Жизнь надо прожить так, чтобы не было мучительно больно за бесцельно прожитые годы" (с)
0
 Аватар для ProRockX
263 / 109 / 26
Регистрация: 16.03.2013
Сообщений: 272
18.09.2015, 06:09  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Нет слов. Два года писать программу левой пяткой вместо того чтобы воспользоваться первым же ответом в топике!
northener, вообще-то в предыдущем сообщении, которое и было 2 года назад, я написал код процедуры, по принципу, как посоветовали выше. Просто через некоторое время узнав, что это можно было сделать гораздо проще решил поделиться. Вдруг кому-нибудь пригодится. А насчёт проги - эти 2 года я и коллеги пользовались её при работе, и я периодически её модифицировал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.09.2015, 06:09
Помогаю со студенческими работами здесь

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

Многоразовое выполнение внешних скриптов
Есть 2 внешних php скрипта. В них есть повторяющиеся элементы: инклудятся одни и теже библиотеки, названия методов, классов... Есть...

ВЫполнение скриптов на другом сервере
Есть веб сервер на котором нет поддержки php mysql Есть ещё один веб сервер на котором скрипты php mysql выполняются. Как сделать...

Выполнение скриптов sh и ошибка nice
Здравствуйте! Столкнулся с проблемой выполнения скриптов sh и ошибкой nice. Мне нужно запустить скрипт из своего пользователя (не рут)....

Выполнение ASP скриптов хранящихся в БД
Ситуёвина: Храню HTML файлы в таблицах БД. Использую скрипт на ASP для извлечение контента файлов и отображения в браузере. Проблема:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru