![]() |
|
Модераторы: Akella |
![]()
|
|
| Alkor135 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
Написал процедуру (FireBierd 2.1 доступ из Delphi 2009 через InterBase).
Мне нужно, чтобы она работала получая имя таблицы как входящий параметр. Вот код, когда я задаю имя таблицы как входящий параметр, процедура не компилится (пробовал и с двоеточием):
А когда задаю имя таблицы явно, все прекрасно компилируется и работает:
Подскажите как в процедуру передать имя таблицы как входящий параметр? Это сообщение отредактировал(а) Alkor135 - 27.5.2009, 00:45 |
||||
|
|||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
Пока не могу сообразить. Но, наверное, придётся использовать execute statement
Добавлено через 3 минуты и 59 секунд Примеры>> Добавлено через 5 минут и 43 секунды Кстати, источник:
|
|||
|
||||
| Alkor135 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
Спасибо, буду разбираться. |
||||
|
|||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
Alkor135, опиши задачу, может обойдемся без execute statement
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| Alkor135 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
У меня есть 27 таблиц. Делаю выборку и получаю 27 строк, сортирую их по 7 полю и оставляю только 14 строк, т.е. остаются строки только из тех таблиц из которых нужно делать сдедующие выборки. Т.к. выборка у меня в StringGrid, беру и присваиваю значения ячеек с именами таблиц, созданным переменным. Вот теперь эти переменные мне и нужно передать как входные параметры в процедуру, где эти входные параметры будут стоять на месте имени таблицы. По большому счету, нужно из выборки из 27 таблиц определить с какими 14 в дальнейшем работать (это уже реализовано). Теперь нужно сформировать запрос к этим 14 таблицам. Процедуру написать легко если изначально знать имена всех 14 таблиц, но набор будет меняться в зависимости от даты выборки 27 таблиц. Не знаю, понятно ли объяснил. Есть мыслишка как это в Delphi сделать, т.е. значеня переменных вставлять в Query запрос. |
|||
|
||||
| Deniz |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
я не понял
Посмотрев на код типа
Если задать дату, больше которой нет в таблице, будет как в анекдоте: "Ну у Вас и запросы - сказала база данных и повисла." Это реализовывается 1 запросом:
Опять же зачем хранить отдельно date и time, есть же timestamp? Это сообщение отредактировал(а) Deniz - 28.5.2009, 09:00 -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
||||
|
|||||
| Alkor135 |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
То, что я только начал изучать SQL - это правда. А вот то, что я не пробовал min и max - это не правда. У меня сделано 27 вот таких поцедуд (к каждой таблице):
И она, которая получает результат из всех 27:
Так вок: сейчас у меня все прекрасно работает и сводную таблицу я получаю за 3 секунды. Когда пользовался min и max, сводная таблица получалась за 40 секунд. Поэтому я отказался от использования min и max. |
||||||||||
|
|||||||||||
| Alkor135 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
Ну вот, вспомнил Deniz анекдот, у меня прога и повисла.
Вот такую хранимую процедуру в БД:
при этом все прекрасно работает ![]() Я загружаю в StringGrid вот такой процедурой из Delphi:
И прога виснет. Может кто может подсказать, где я ошибся? Это сообщение отредактировал(а) Alkor135 - 28.5.2009, 11:25 |
||||
|
|||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 7 Всего: 54 |
Сколько по времени выполняется процедура в IBExpert'е? И скольк по времени программа находиться в "подвешеном" состоянии? Как вариант диагноз может быть такой: Поскольку обращение к БД не вынесено в отдельный поток и выполняется за ощутимое (т.е. 1, 2 и более секунд) время, то пользовательский интерфейс клиентской (той которая обращается к БД) программы "подвисает" и приложение "Не отвечает". Но при этом не факт, что оно не работает. Сам с таким столкнулся и пришлось запрос к БД выносить в отдельный процес - жуть... -------------------- Слава Україні! |
|||
|
||||
| Alkor135 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
В IBExpert процедура обрабатывается за 1-2 секунды. Когда вызываю из Delphi, то 5 минут ждал, потом надоело и закрыл. Отсюда и вынес вердикт, что она повесилась. А как вынести в отдельный поток обращение к базе? Ой, нашел свою ошибочку. Орфография хромает. Это сообщение отредактировал(а) Alkor135 - 28.5.2009, 11:26 |
||||
|
|||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 7 Всего: 54 |
При одинаковых входящих параметрах (извиняюсь за недоверчивость А вообще к БД обращение проходить нормально, т.е. любой другой запрос выполняется или это пока первый?
Я пишу на CLI\C++ (не советую связываться, если под .NET, то лучше С# сразу брать и не мучаться -------------------- Слава Україні! |
||||
|
|||||
| Alkor135 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
Вот-вот, во входящие параметры закралась ошибочка, но теперь то я пост подправил и ее не видно. А вообще это мой первый проект по программированию как в Delphi так и в SQL (FireBird). Delphi мне показался проще чем С++. До сих пор вехать не могу, чтож за классы там такие. К томуже, примеров для Delphi нашел больше. Мне вообще советовали на Java писать, говорят кросплатформенная штука, за ней будующее. |
||||||
|
|||||||
| Deniz |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
не верю (с) Сравни 2 кода на быстродействие (сделай 2 тестовые процедуры):
причем, в первом случае чем дальше нужная дата тем дольше будет работать. А во втором время практически не изменится. Наличие индекса по дате может улучшить оба варианта. PS: К тому же первый вариант некорректен, есть возможность бесконечного(пока размер даты не кончится) цикла. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
||||
|
|||||
| Alkor135 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 5.4.2009 Репутация: нет Всего: нет |
А FireBird, где-нибудь показывает за какое время он выполнил процедуру? Я сравнил визуально, моя выполняется за 2 сек., твоя за 3 сек., но я могу быть субективен. Зато очень сильно отличаюся по скорости две моих других процедуры. Та что за 2 сек.
Вторая с min и max выполняется почти 2 мин.:
Хотя эти процедуры не совсем равнозначны. У первой два входных параметра, а вторая один входной обсчитывает и делает два параметра внутри себя. Может действительно скорость выполнения не от использования min и max зависит? Тогда подскажите отчего она такая разная? Кстати все таблицы у меня проиндексированы по двум полям (по дате и по времени). Это сообщение отредактировал(а) Alkor135 - 28.5.2009, 17:06 |
||||
|
|||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 7 Всего: 54 |
Ну здрасте, а скриншот ты с чего делал?! Не с IBExpert'а?! Вот в нём при выполнении запроса в нижней части активного окна появляется Memo-поле, куда выводиться код ошибки, план запроса и время выполнения запроса! -------------------- Слава Україні! |
|||
|
||||
![]()
|
| Правила форума "Interbase" | |
|
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |