Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BDE, SQL, вложенные запросы 
:(
    Опции темы
Андрей
  Дата 5.12.2002, 03:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











:baaa Народ!
Неужели в дельфийском BDE нельзя использовать вложенные запросы, т.е. конструкции вида SELECT ... FROM SELECT ... ? Что же это за изврат то? Или я не прав? Очень бы хотелось ошибаться...
  Вверх
AntonSaburov
Дата 5.12.2002, 03:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



BDE - это тебе не SQL-сервер. Ты еще погорюй, что там всяких дружеских функций нет для даты, конвертации и прочего :)
Увы, такое он не умеет.
PM MAIL WWW ICQ   Вверх
Андрей
Дата 5.12.2002, 03:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Мда...
Дельфи отстой... BDE маздай... ???
  Вверх
Vit
Дата 5.12.2002, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата(Guest @ 04.12.2002, 10:59)
Дельфи отстой...

Промашечка вышла, Дельфи тут не причём, он не выполняет никаких запросов, запрос передаётся драйверу и именно драйвер выполняет эти операции.

Цитата
BDE маздай...

Тут можно отчасти согласится , хотя я не знаю ни одной локальной базы данных и ни одной системы драйверов для локальных баз данных, которые бы поддерживали вложенные запросы. Чтобы Вас успокоить - ODBC и DAO тоже не поддерживают их.

Теперь разберёмся с самими вложенными запросами. Вложенные запросы не являются стандартом в SQL следовательно каждый производитель драйвера сам решает поддерживать их или нет. Кстати даже многие сервера баз данных не поддерживают такие запросы.

Теперь как всё-таки выполнить такой запрос?
Прежде всего хотелось бы услышать какую базу данных вы используете? Если это сервер баз данных (MS SQL Server, Oracle, IB и т.п.), то нечего пинять на BDE, надо просто использовать соответствуюшие системы доступа к базам данных - например ADO. Если базы данных локальные (например Paradox или MS Access) то это легко делается через View... Создаёте View, затем его кверите - другого способа с локальными базами данных я не знаю и очень подозреваю что его нет.

И последнее: в 99% случаев вложенный запрос можно заменить на соответствующий Join.




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Андрей
  Дата 5.12.2002, 06:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Vit @ 04.12.2002, 21:32)
Цитата(Guest @ 04.12.2002, 10:59)
Дельфи отстой...

Промашечка вышла, Дельфи тут не причём, он не выполняет никаких запросов, запрос передаётся драйверу и именно драйвер выполняет эти операции.

Цитата
BDE маздай...

Тут можно отчасти согласится , хотя я не знаю ни одной локальной базы данных и ни одной системы драйверов для локальных баз данных, которые бы поддерживали вложенные запросы. Чтобы Вас успокоить - ODBC и DAO тоже не поддерживают их.

Теперь разберёмся с самими вложенными запросами. Вложенные запросы не являются стандартом в SQL следовательно каждый производитель драйвера сам решает поддерживать их или нет. Кстати даже многие сервера баз данных не поддерживают такие запросы.

Теперь как всё-таки выполнить такой запрос?
Прежде всего хотелось бы услышать какую базу данных вы используете? Если это сервер баз данных (MS SQL Server, Oracle, IB и т.п.), то нечего пинять на BDE, надо просто использовать соответствуюшие системы доступа к базам данных - например ADO. Если базы данных локальные (например Paradox или MS Access) то это легко делается через View... Создаёте View, затем его кверите - другого способа с локальными базами данных я не знаю и очень подозреваю что его нет.

И последнее: в 99% случаев вложенный запрос можно заменить на соответствующий Join.

Цитата
хотя я не знаю ни одной локальной базы данных и ни одной системы драйверов для локальных баз данных, которые бы поддерживали вложенные запросы.

Ради интереса зашел в Access и написал SELECT * FROM (SELECT * FROM Table) - и все работает, дельфи же это и видеть не хочет.
Цитата
Если базы данных локальные (например Paradox или MS Access) то это легко делается через View...

Я использую Paradox. A View он кстати тоже не воспринимает! К тому же насколько я знаю при использовании view существует довольно много ограничений.
  Вверх
Vit
Дата 5.12.2002, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата
Ради интереса зашел в Access и написал SELECT * FROM (SELECT * FROM Table) - и все работает,


Ну не надо путать, конечно сама среда обычно более мощная, чем доступ извне. Многие опции могут быть даже не доступны извне совсем и дело тут не в Дельфи и даже не в BDE. Все драйвера для доступа к MS Access для BDE/ODBC написаны Микрософтом, а не Борландом - и они не предусмотрели такой возможности.

Цитата
дельфи же это и видеть не хочет.


Опять же поправляю -  дельфи вообще НИЧЕГО с кверёй не делает, всё что делает компонент TQuery это передаёт строку запроса драйверу и берёт от него результат, никаких запросов сам компонент не делает! Найдите драйвер который будет обеспечивать выполнения таких кверей и они будут работать.


Цитата
Я использую Paradox. A View он кстати тоже не воспринимает! К тому же насколько я знаю при использовании view существует довольно много ограничений.


Paradox довольно старая система, одна из самых старых и никогда вложенных запросов не поддерживала. View же поддерживаются очень хорошо. Например создайте в каталоге с таблицами текстовый файл с именем "MyQuery.sql", внутри файла напишите:

Select * From MyTable

Сохраните его.

Теперь из Парадокса или из дельфи запустите кверю:

Select * from MyQuery

или

Select * from "MyQuery.sql"

и получите результат. На счёт ограничений view - в чём ограничения? Реально использование View абсолютно не отличается от вложенного запроса, так как вложенный запрос делается путём создания временной View и затем запуск квери на её результате.


И на последок маленький совет - если это возможно, то перейдите на MS Access + ADO компоненты и там эти запросы будут идти на ура. Да и база данных более новая и возможностей у неё больше. Тем более что последние версии Дельфи очень хорошо поддерживают ADO и имеют мощные компоенты для работы с ним.




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Юля
Дата 5.12.2002, 07:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Андрей!
Да все будет хорошо!!!
Напишешь ты эту курсовую!

зы:я ведь ничего не перепутала? :)
  Вверх
Medved
Дата 5.12.2002, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 1
Всего: 154



:baaa :baaa :baaa :baaa :baaa :baaa :baaa
Цитата

Неужели в дельфийском BDE нельзя использовать вложенные запросы

Почему нельзя, можно!


Вот пример:
Я использовал стандартный компонент доступа к базам данных (TQurey) и работал через BDE с алиасом BDDEMOS, с таблицей animals.db

вот мой запрос (с вложенным запросом)

Код

SELECT *
FROM animals
WHERE name IN (SELECT Name FROM animals WHERE Name = 'Boa')


у меня все работет и все получилось!


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
МММ
Дата 5.12.2002, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 18.6.2002

Репутация: нет
Всего: 1



Хоть "убейте" меня, а разве View работает для локальных таблиц?

Насчет Oracle, он прекрасно понимает вложенные запросы....


--------------------
PM MAIL   Вверх
Medved
Дата 5.12.2002, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 1
Всего: 154



Цитата

SELECT * FROM (SELECT * FROM Table)


Эта конструкиця, детище Майкрософтовских программистов..... такое же как и тип Variant. И то и другое использовать не рекомендуется...... это я ИМХО считаю плохим стилем...

конструкиця  SELECT * FROM (SELECT * FROM Table) не является уникальной, в том смысле, что эту же задачу можно решить другим способом, альтернативным, просто поменяв логику запроса. ( смотри выше, там  я привел тебе альтернативу)

Это так, же как и использование переходов к меткам (GO TO), лучше это не использовать, и доказано, что с помощью управляющих конструкций,можно обойтись в программировании и без них (переходов),а их использование как всем известно, является плохим стилем программирования


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Medved
Дата 5.12.2002, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 1
Всего: 154



Цитата

Андрей!
Да все будет хорошо!!!
Напишешь ты эту курсовую!

зы:я ведь ничего не перепутала?  


Да, с началом сесси в ВУЗах, чувствую, прибавиться у нас посетителей на форуме......


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Vit
Дата 5.12.2002, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата
Хоть "убейте" меня, а разве View работает для локальных таблиц?

Я же привёл пример как сделать View для парадокса. Или что-то непонятно? Я могу код выложить, но вроде должно и так быть всё ясно.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
МММ
Дата 5.12.2002, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 18.6.2002

Репутация: нет
Всего: 1



Цитата
Я же привёл пример как сделать View для парадокса. Или что-то непонятно? Я могу код выложить, но вроде должно и так быть всё ясно.


я имел в виду
CREATE VIEW MyTable
AS
select * from 'table.dbf'


--------------------
PM MAIL   Вверх
Vit
Дата 5.12.2002, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Конструкция "CREATE VIEW" действительно не доступна, но тем ни менее View можно очень легко создать и очень легко ими пользоваться, я пользовался даже многовложенными View для генерации очень сложный Crystal Report рапортов - в некоторых случаях это очень мощное средство. А если надо создать View, то можно это сделать в пару строк и без квери:

Код

With TStringList.create do
 try
   text:='Select * From Mytable';
   savetofile('myView.sql');
 finally
   free;
 end;



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
МММ
Дата 5.12.2002, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 18.6.2002

Репутация: нет
Всего: 1



Хорошо , делаю так:

есть файл 555.sql
содержание
Код
select * from "kart.dbf"


на форме Query1

с запросом
Код
select * from "555.sql"


выдается ошибка



--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.