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

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

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

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

Чемпионы рейтинга экспертов в этой рассылке

Шичко Игорь
Статус: Студент
Рейтинг: 253
∙ повысить рейтинг >>
Виктор Пырлик
Статус: Профессионал
Рейтинг: 72
∙ повысить рейтинг >>
Командин Константин Евгениевич
Статус: 5-й класс
Рейтинг: 27
∙ повысить рейтинг >>

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

Выпуск № 515
от 18.11.2008, 03:05

Администратор:Gh0stik
В рассылке:Подписчиков: 253, Экспертов: 23
В номере:Вопросов: 2, Ответов: 4

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 150358: Здравствуйте! Помогите пожалуйста. У меня есть табличка с одним полем. Как вывести все данные таблицы в Combobox? Я использовала вот такой код программы: ADOTable1.First; for i:=1 to ADOTable1.RecordCount do begin ComboBox1.Items.Add(...


Вопрос № 150380: Здравствуйте ув. эксперты! Подскажите в чем разница компонентов dbExpress, BDE, ADO, InterBase. Что за бд BDE, ADO. В чем принципиальное отличие и если можно поподробнее. Когда какие предпочтительнее в использование. От ссылок в том числе тоже не ...

Вопрос № 150.358
Здравствуйте! Помогите пожалуйста. У меня есть табличка с одним полем. Как вывести все данные таблицы в Combobox? Я использовала вот такой код программы:

ADOTable1.First;
for i:=1 to ADOTable1.RecordCount do
begin
ComboBox1.Items.Add(ADOTable1.fieldbyname('name_p').AsString);
end;
ADOTable1.Next;

Но в Combobox выводиться только первое значение поля, причём несколько раз. В чём ошибка?
Отправлен: 12.11.2008, 20:33
Вопрос задала: Шушкова Марина Сергеевна (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Delph
Здравствуйте, Шушкова Марина Сергеевна!

Ваша ошибка двольно элементарна, хотя и встречается весьма часто. Оператор ADOTable1.Next; Вы вынесли за пределы цикла, поэтому он выполняется единственный раз уже после того, как отработал весь цикл. Его следует внести внутрь, но желательно с небольшим уточнением. Привожу исправленный вариант.

ADOTable1.First;
for i:=1 to ADOTable1.RecordCount do
begin
ComboBox1.Items.Add(ADOTable1.fieldbyname('name_p').AsString);
if i < ADOTable1.RecordCount then ADOTable1.Next; { проверка предотвращает попытку перехода на несуществующую запись, следующую после последней }
end;

Желаю успехов!
---------
Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
Ответ отправил: Delph (статус: Практикант)
Ответ отправлен: 12.11.2008, 22:03

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 235313 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5


    Отвечает: progerNSK
    Здравствуйте, Шушкова Марина Сергеевна!

    К дополнению ответа от Delph

    RecordCount желательно неиспользовать для цикла, Eof оптимально, все зависит от датасетов - их настроек, так например реальное число записей может 100, а recordcount покажет 10 (не все записи сразу подгружаются (реальное кол-во записей можно узнать - например- last поставить а затем recordcount))

    ADOTable1.First;
    while(AdoTable1.Eof=false)do
    begin
    ComboBox1.Items.Add(ADOTable1.fieldbyname('name_p').AsString);
    Adotable1.Next;
    end;

    ---------
    Программист - это человек который решает проблему, о которой вы не знаете, способом который вы не понимаете
    Ответ отправил: progerNSK (статус: 9-й класс)
    Ответ отправлен: 13.11.2008, 06:27

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 235333 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5


    Вопрос № 150.380
    Здравствуйте ув. эксперты!
    Подскажите в чем разница компонентов dbExpress, BDE, ADO, InterBase. Что за бд BDE, ADO. В чем принципиальное отличие и если можно поподробнее. Когда какие предпочтительнее в использование. От ссылок в том числе тоже не откажусь.
    Спасибо заранее!
    Отправлен: 12.11.2008, 23:54
    Вопрос задал: Sp3ct0r (статус: Посетитель)
    Всего ответов: 2
    Мини-форум вопроса >>> (сообщений: 0)

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

    dbExpress, BDE, ADO, InterBase - это компоненты доступа к базам данных.
    BDE -(Borland Database Engine) универсальный подход - это набор библиотек для доступа к почти всем известным (на те года когда разрабатывалось) базам данных, но довольно древняя и весьма устаревшая технология. Сегодня не рекомендуется использовать. В редких случаях можно, для "обычных" таблиц типа Paradox, DBase использовать BDE, но все равно, надо будет поставлять вместе с exe-файлом несколько библиотек (или устанавливать BDE).

    dbExpress
    © Цитата:

    Обеспечивает быстрый и высокопроизводительный доступ к SQL серверам баз данных.
    Для каждого поддерживаемого сервера dbExpress обеспечивает драйвер, как независимую библиотеку, которая предоставляет общий интерфейс для обработки запросов и сохранения процедур.
    dbExpress драйверы доступны для Windows как библиотеки динамической связи. Когда вы развертываете приложение баз данных, которое использует dbExpress, вы должны только включить dll с прикладными файлами.
    dbExpress предлагает драйверы баз данных для доступа к Oracle, Microsoft SQL Server, MySQL, InterBase, Firebird базам данных. Использование этих драйверов аналогично стандартным dbExpress drivers поставляемых Borland.
    Особенности программы:
    - прямой доступ к данным
    - способность соединяться через родной протокол, не используя клиентское программное обеспечение (кроме DbxSda)
    - высокая эффективность
    - поддержка последних версий серверов
    - поддержка всех типов данных

    подробно можно почитать тут
    URL &g t;>Архитектура dbExpress
    URL >>Технология dbExpress Сервер баз данных InterBase

    от себя добавлю - это технология клиента с кэшированием. Не очень удобно для работы. А для работы с Firebird или InterBase - лучше использовать компоненты со страницы InterBase.

    ADO - является частью более крупномасштабной технологии под названием Microsoft Data Access Components (MDAC). Термин MDAC является общим обозначением для всех разработанных компанией Microsoft технологий, связанных с БД. К этому набору относятся ADO, OLE DB, ODBC и RDS (Remote Data Services).
    Сегодня наиболее предпочтительней использовать, фактически, для работы с MS SQL Server это единственная практически используемая технология (хотя, есть и иные возможности). Так же, с помощью этой технологии можно подключаться практически к любым базам данных, для которых есть драйвера в системе. Отлично работает, весьма удобная, не т ребует дополнительных библиотек для переноса программ. Используется в промышленных системах и различных ПО ориентированных на работу с базами данных.
    подробно можно почитать тут URL >>Технология ADO

    InterBase - это "родные" драйвера для доступа к базам данных InterBase и Firebird. Единственно предпочтительные для работы с этими СУБД. Инкапсулируют в себе полный набор для работы и управления этими СУБД. Очень быстрые, не требуют установки дополнительного ПО на компьютер клиента (достаточно включить 1 библиотеку).
    подробно можно почитать тут URL >>использование InterBase в приложениях

    Моё резюме - если вы хотите работать с продуктами Microsoft (например, MS SQLServer) - используйте ADO
    если хотите работать с Firebird / InterBase - используйте компоненты IterBase< br> если хотите работать с MySQL - используйте Data Access Components for MySQL (MyDAC)
    если хотите работать с Oracle - или используйте ADO или "родные" драйвера для Oracle
    Но не используйте BDE. Легкость подключения в BDE обманчива.. Если в целях обучения на локальной машине, то да - действительно удобно.. Но не более, для промышленного, коммерческого или просто массового распространения (даже по типу «только знакомым и друзьям») уже не годится.
    *************************
    Всё сказанное – это личное мнение. Полную информацию и описание, как и рекомендации с примерами использования можно найти в сети. Например, на сайте www.sql.ru или www.ibase.ru


    ---------
    не получается там - где не пробуют
    Ответ отправил: Виктор Пырлик (статус: Профессионал)
    Россия, Екатеринбург
    Тел.: 89043822027
    ICQ: 490191733
    ----
    Ответ отправлен: 13.11.2008, 07:19

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 235335 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Отвечает: sir Henry
    Здравствуйте, Sp3ct0r!
    Добавлю немножко по dbExpress.
    Сначала dbExpress позиционировалась как система доступа к данным какого-либо SQL сервера, при этом доступ к старым локальным системам (Paradox, dBase и т.п.) исключался. Не всем это понравилось. В результате появился специальный драйвер для ODBC (по аналогии с провайдером ADO для ODBC) чтобы иметь доступ и к "настольным" базам. Смотрите ссылку.
    Основное преимущество dbExpress перед другими системами доступа - скорость. BDE система многоступенчатая, от того, что команды SQL преодолевают много ступенек скорость теряется. В ADO там свои проблемы. dbExpress, в простейшем случае, использует всего две дополнительные библиотеки. Одна, это собственно библиотека dbExpress (общие функции) и вторая - библиотека функций того сервера БД, к которому Вам надо по дключаться. Установки при этом (в отличие от BDE и ADO) не требуется. Просто к Вашей программе прикладываются две dll'ки.
    Виктор Пырлик упомянул про неудобство работы. Это связано с тем, что принцип работы с компонентами dbExpress несколько другой, чем с ADO и BDE. Основные компоненты - TSQLDataSet, TSQLQuery и даже TSQLTable создают только однонаправленный набор данных, т.е. набор данных по которому можно передвигаться только в одном направлении - с первой записи к последней. Такое свойство позволяет в мгновение ока строить отчёты. Для отчётов эти компоненты просто бесподобны и быстры. Другое дело, когда мы хотим налюбовавшись на данные что-то в них интерактивно подправить, причём не как-нибудь, а в табличной форме, чтобы было как в Excel. Для этого случая применяют специальный компонент, который кэширует данные с сервера к себе в память - TSimpleDataSet. Вот здесь у начинающего программиста и возникает неудо бство, т.к. внутри компонента надо создать ещё один компонент, где собственно и будут хранится изъятые с сервера данные. Мне это тоже сначала показалось неудобным, но потом привык, т.к. в готовом приложении по скорости работы dbExpress обставлял как стоячих и ADO и BDE и даже комопоненты Interbase. А ведь, как известно, программа пишеться для пользователя, а не для программиста.
    Мало того, с dbExpress можно вообще отказаться от специализированных компонентов отображения данных - DBGrid, DBComboBox и т.п., а из тех самых однонаправленных перекладывать данные в стандартные компоненты - ComboBox, Memo, StringGrid и т.п. и уже там их обработав передать SQL-запросом обратно на сервер. При этом, как Вы сами понимаете, не требуется постоянного соединения с сервером.

    Ответ отправил: sir Henry (статус: Академик)
    Россия, Красноярск
    ----
    Ответ отправлен: 13.11.2008, 10:14

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 235358 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вы имеете возможность оценить этот выпуск рассылки.
    Нам очень важно Ваше мнение!
    Оценить этот выпуск рассылки >>

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

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

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

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

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


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

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2008, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.11 от 9.11.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное