Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 415
от 04.11.2007, 14:35

Администратор:Gh0stik
В рассылке:Подписчиков: 310, Экспертов: 34
В номере:Вопросов: 3, Ответов: 5


Вопрос № 106958: Здравствуйте! Подскажите пожалуйста как можно сделать запрос SQL для трех таблиц: 1 таблица значения содержит два столбца ID и Value 2 таблица координаты содержит ID и 5 столбцов и 5 записей 3 таблица пустая ID и 5 столбцов и 5 запис...
Вопрос № 106975: Здравствуйте эксперты. С базами данных работаю впервые. Такой вопрос. Есть две одинаковых формы (Form1 и Form2), на каждой по одному DBGrid. Каждый DBGrid соединен через свой DataSource со своим ClientDataSet. Каждая таблица загружается из своег...
Вопрос № 107243: Здравствуйте, господа эксперты. у меня сложилась ситуация из которой я не могу пока найти решения решил обратится за помощью к Вам. исх. данные: Использую Delpi7. Из своего приложения Подключаюсь к БД FireBird, используя след .компоненты: IB...

Вопрос № 106.958
Здравствуйте!
Подскажите пожалуйста как можно сделать запрос SQL для трех таблиц:
1 таблица значения содержит два столбца ID и Value
2 таблица координаты содержит ID и 5 столбцов и 5 записей
3 таблица пустая ID и 5 столбцов и 5 записей
2-я табица заполнена значениями ID 1-ой таблицы, надо сделать запрос после которого 3-я таблица заполнится значениями Value 3-ей таблицы по значениям ID 2-ой таблицы т.е. 3-я таблица заполнится значениями Value по значениям в ячейках 2-ой таблицы.
база InterBase, программирование в Delphi.
Заранее благодарен!
Отправлен: 27.10.2007, 10:09
Вопрос задал: Muratov Ermek (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Виктор Пырлик
Здравствуйте, Muratov Ermek!

В приложении дан код, лучше, это сделать в виде просмотра - тогда, это будет для Delphi обыкновенная таблица, правда, не редактируемая - только просмотр и получение данных. Но, думаю вам как раз и надо формировать матрицу...
----------------
Второй код, позволяет реализовать эту задачу на "чистом" SQL без привязки к СУБД, и наверно, он "проще".. :)

PS: можно объяснять проще - на языке математики.. :)
А то, если бы не пример таблицы-результата, я бы, например, так и не понял, что вам надо...так запутан вопрос.

Приложение:

---------
Если ничего не помогло - надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Практикант)
Ответ отправлен: 27.10.2007, 19:37
Оценка за ответ: 5

Отвечает: Netizen
!!!
Уважаемые эксперты! При создании запросов из нескольких таблиц многие используют устаревшую конструкцию Where, хотя на мой взгляд наиболее интереснее использовать Join

Отвечать нужно только на заданный вопрос. А вот своё мнение можно изложить в мини-форуме.
-----
∙ Отредактировал: sir henry (Академик)
∙ Дата редактирования: 30.10.2007, 11:51
Ответ отправил: Netizen (статус: Студент)
Ответ отправлен: 29.10.2007, 09:48


Вопрос № 106.975
Здравствуйте эксперты. С базами данных работаю впервые.
Такой вопрос. Есть две одинаковых формы (Form1 и Form2), на каждой по одному DBGrid. Каждый DBGrid соединен через свой DataSource со своим ClientDataSet. Каждая таблица загружается из своего xml файла.
Есть так же третья форма, на ней нужно сделать ещё один DBGrid, включающий первую колонку из первой колонки первой таблицы, вторую колонку из второй колонки второй таблицы и третья колонка должна показывать сумму чисел в этих колонках.
Я так понимаю нужно использовать SQLQuery? Обьясните как его подключать в таком случае и куда..
Отправлен: 27.10.2007, 13:20
Вопрос задал: Вячеслав Шинкаренко (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Вячеслав Шинкаренко!

Строится цепочка Query->DataSiurce->DBGrid (или другой Control)

То что этот DBGrid отображает получается через SQL-запрос, который вписывается в свойство Query.SQL.Add('Select ... from Table ....');

ЕСли первые две формы отображают содержимое xml-файла, то к БД это отношения не имеет и совместный результат в третьей форме получить проблематично.
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 27.10.2007, 13:29
Оценка за ответ: 5
Комментарий оценки:
Тогда как можно узнать значение конкретной ячейки в цепочке ClientDataSet->DataSource->DBGrid? Допустим значение ячейки [2,3] ?

Отвечает: Кэр Лаэда
Здравствуйте, Вячеслав Шинкаренко!

поробуйте сделать так (пишу без Delphi поэтому могут быть ошибки в синтаксисе если что то не поймете пишите в минифорум)
допустим что 1 поле в 1 датасете называется "Поле1", а второе поле во втором датасете - "Поле2".

Единственное условие которое в данном случае должно соблюдаться, это чтобы в ClientDataSet что на первой форме должно быть такое же количество записей что и на второй.

сам по себе ClientDataSet можно представить как таблицу и к нему можно обращатся как к таблице.


{}
var
_cds: TClientDataSet;
i:integer;
begin

try
if _cds=nil then
_cds:=TClientDataSet.Create(nil);
_cds.FieldDefs.Add('Поле1',ftInteger,0,False);
_cds.FieldDefs.Add('Поле2',ftInteger,0,false);
_cds.FieldDefs.Add('Расчет',ftInteger,0,False);
_cds.CreateDataSet;

Form1.ClientDataSet1.First;
Form2.ClientDataSet1.First;
for I := 0 to Form1.ClientDataSet1.RecordCount - 1 do
begin
_cds.AppendRecord([
Form1.ClientDataSet1.FieldByName('Поле1').AsInteger,
Form2.ClientDataSet1.FieldByName('Поле2').AsInteger,
Form1.ClientDataSet1.FieldByName('Поле1').AsInteger+ Form2.ClientDataSet1.FieldByName('Поле2').AsInteger
]);
Form1.ClientDataSet1.Next;
Form2.ClientDataSet1.Next;

end;
Dataset.DataSource:=ClientDataSet1;
ClientDataSet1.Data:=_cds.Data;
finally
if _cds<>nil then
FreeAndNil(_cds);
end;

end;
{}


---------
Я знаю что ничего не знаю, но я знаю больше, чем тот кто думает что знает все
Ответ отправил: Кэр Лаэда (статус: Практикант)
Ответ отправлен: 28.10.2007, 02:37
Оценка за ответ: 5
Комментарий оценки:
Это то что нужно..
Так и сделаю!
Спасибо!


Вопрос № 107.243
Здравствуйте, господа эксперты.
у меня сложилась ситуация из которой я не могу пока найти решения решил обратится за помощью к Вам.
исх. данные: Использую Delpi7. Из своего приложения Подключаюсь к БД FireBird, используя след .компоненты: IBDatabase, IBTransaction, IBQuery, DataSource.
подключение к базе осуществляется при активации окна формы Form командой: IBQuery.Active:=true;
в форме есть поля (Edit и Memo) для отображения/ редактирования информации, кнопки и DBGrid.
ввожу какие-то данные в таблицу БД (удаляю,меняю, добавляю записи) и хочу чтоб эти изменения были видны из второй копии приложения запущенного одновременно с первой копией приложения если, скажем, щелкнуть по кнопке "обновить" или по нажатию F5 (аналогично интерфейсу windows). как сделать так что бы это стало возможным? (мне удалось этого добиться если сделать отключение и повторное подключение к базе данных используя методы:
IBDatabase.Close и затем IBDatabase.Open, но по моему это как-то "некрасиво", неужели нет других способов?)
Кстати, если можно, поясните чем отличаются методы:
IBDatabase.Open (Close) - IBDatabase.Connected:=true (False) и
IBQuery.Open (Close) - IBQuery.Active:=true (False);

И еще один вопрос: можно ли как нибудь определять для записей (выбраных в dbgrid) заблокированы ли они для изменения другой копией приложения, и соответственно подсвечивать их (может быть есть какие-нибудь другие компоненты, вместо DBGrid)

Благодарю всех откликнувшихся.

такого же
скажите пожалуйста, каким образом можно
Отправлен: 29.10.2007, 15:38
Вопрос задал: Косяков Михаил (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Косяков Михаил!

Сначала по второму вопросу.
Это абсолютно идентичные методы использования. Внутреняя реализация выполнена так, что переключение свойства вызывает соответствующий метод - для True - Open, для False - Close.
По первому вопросу. Изменения во второй копии приложения не видны, потому что первая их еще не подтвердила. Подтверждения по-умолчанию для компонентов IBExpress (которые поставляются вместе с Delphi) выполняются при отключении от базы. Вручную подтверждение (Commit) осуществляется методами Commit и CommitRetaining компонента IBTransaction. Разница в использовании Commit и CommitRetaining такова:
Commit закрывает все наборы данных и выполняет подтверждение изменений
CommitRetaining выполняет подтверждение изменений без закрывания наборов данных
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 9-ый класс)
Ответ отправлен: 29.10.2007, 15:59
Оценка за ответ: 4
Комментарий оценки:
спасибо за подробное объяснение. Очень важная деталь в моем случае оказалась вне Вашего комментария - что бы увидеть обновление из второй копии приложения надо " нужно подтвердить транзакцию первого приложения и перезапустить транзакцию второго (по кнопке обновить) " - как посоветовал "Проходящий мимо" за что ему огромное спасибо


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.61.1 от 16.10.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное