Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» TOpenDialog

Автор: filja
Дата сообщения: 26.01.2005 13:42
Этой процедурой я открываю текстовый файл, который помещается в Memo1:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
s: string;
f: textfile;
begin
if OpenDialog1.Execute and FileExists(OpenDialog1.FileName) then
begin
OpenDialog1.HistoryList.Add(OpenDialog1.FileName);
AssignFile(F,OpenDialog1.FileName);
Reset(F);
Memo1.Lines.Clear;
while not EOF(F) do begin
ReadLn(F, S);
Memo1.Lines.Add(S);
end;
CloseFile(F);
end;
end;

Как сделать так, чтоб в DBGridEh открывался файл БД Access *.mdb, и с ним можно было работать?
Автор: EZH
Дата сообщения: 26.01.2005 23:52
Не понятно зачем ты приводишь свой код для чтения текстового файла в мемо, если тебе надо открыть файл бд в гриде.

По чтению текстового файла в мемо:
Совершенно незачем писать циклическое чтение строк, когда уже всё до тебя написано
У Memo есть свойство Lines - это класс TStrings. А у него, в свою очередь есть метод LoadFromFile(FileName)
Достаточно написать Memo1.Lines.LoadFromFile(АшдуТфьу) и весь текстовый файл FileName будет прочитан в Memo.

По БД:
Кладешь на форму компонент ADOTable, у него в свойстве ConnectionString указываешь нечто вроде
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=База данных MS Access;DBQ=File.mdb;DefaultDir=;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;"
Эту строку можно сформировать и в диалоге нажав в Object Inspector'е на многоточие после ConnectionString, а там нажав Build... выбирай MS OLE DB Provider for ODBC Driver и так далее... укажи там имя нужного тебе MDB.
В принципе в ConnectionSting можно и программно подставлять в нужное место имя файла, выбранного по OpenDialog.
Потом на форму клади DataSource, у него в свойства DataSet укажи тот компонент ADOTable. Потом клади на форму гриду (Здесь даже не важно DBGridEh это или обычная DBGrid).
У гриды устанавливай свойство DataSource. У ADOTable выбери имя таблицы из MDB в ствойстве TableName, потом делай Active = true. И вуаля - у тебя в гриде появится содержимое этой таблицы.

На самом деле я тебе разьясняю тут полнейшие азы работы с БД в Delphi. Это есть в любой книжке по Delphi.
Автор: YurikGL
Дата сообщения: 27.01.2005 07:26
>EZH
>по бд...

Более правильно взять ADOConnection в котором прописать путь к базе и прочие параметры подсоединения.
К нему зацепить необходимое количество ADODataset (а не ADOTable). У каждого датасета указать что ты хочешь вернуть, таблицу или запрос. Выбрать таблицу или написать запрос. Кинуть на форму необходимое количесво datasource-в. В них прописать соответствующие датасеты. Кинуть на форму необходимое количество Гридов. В них прописать соответсвующие датасорсы. У нужных датасетов говорим active:=true и наслаждаемся таблицей.
Автор: filja
Дата сообщения: 27.01.2005 20:02
EZH
По Memo:
LoadFromFile(FileName) - это Strings, а файл F : textfile.
По BD:
Это все понятно. Как настраивать соединение с БД в АДО, я немножко знаю.
Меня вот что интересует: чтоб я могла отфильтровать существующую БД и отфильтрованный результат сохранить в отдельный файл БД. Затем через время открыть этот файл в этом же гриде и пользовать. Или открыть прежнюю, первоначальную БД - без разницы. Какую угодно.
Как,например, в Ворде чтоб работа с файлами была.

YurikGL
Я так понимаю, я ограничена определенным кол-вом файлов БД? Т.е. нужно заранее определиться, сколько я смогу потом файлов БД пользовать?
Автор: YurikGL
Дата сообщения: 27.01.2005 20:07
А зачем использовать несколько файлов БД?
В одном mdb можно хранить много таблиц.
Но если очень хочется можно одновременно использовать несколько adoconnection и переключаться между ихними датасетами
Автор: filja
Дата сообщения: 27.01.2005 22:40
Ок, много таблиц. Ход мыслей следующий:
В этом случае открываться файл будет не с помощью TOpenDialog, т.к. отдельного файла "таблица1" не существует, есть выход лишь на db1.mdb.

Тогда в обработчике "Закрыть" (текущую АДОТаблицу) я должна писать:
DataModule3.ADOTable1.TableName:=' ';
Это понятно.

А как "Открыть"?
DataModule3.ADOTable1.TableName:=tabl;
Где tabl - некая переменная, знач-е к-рой мы выбираем из списка. Напр-р, ComboBox1.
Эта задача решаема, если заранее отвести для работы, допустим, 10 таблиц.
А если пользователь захочет создавать новые таблицы? Или сохранить старую под новым именем (тем самым создать новую)?

И еще. Как в Аксесе скопировать таблицу? Чтоб было 2 одинаковые? А то она у меня (шапка) слишком большая, чтоб ее заново набивать вручную...
Автор: EZH
Дата сообщения: 28.01.2005 01:26
filja
Я же написал:

Цитата:
в ConnectionSting можно и программно подставлять в нужное место имя файла, выбранного по OpenDialog

А у ADOConnection есть метод GetTableNames - вот тебе и список таблиц.
Автор: filja
Дата сообщения: 28.01.2005 21:42
Занялась я GetTableNames. В ComboBox передаются имена таблиц, из к-рых можно выбрать нужную. Пока что все. Продолжение следует
А вот теперь козырный вопрос: где взять ПОЛНУЮ версию EhLib? Чтоб в exe-шнике, без Делфи работала.
Автор: EZH
Дата сообщения: 29.01.2005 15:27
filja
Бегом в тему http://forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=23536&start=660#lt
Автор: filja
Дата сообщения: 30.01.2005 16:08
Скачала версию EhLib 3.6. Но - странно - когда запускаю Демо, выдает, что не хватает в Демо такого-то модуля. Подобавляла все, что надо, впапку Демо - запустилось. Но это все фигня. А вот когда запускаю свой проект, где компоненты версии 3.5, тоже просит все недостающие модули, к-рые я тоже скопировала в папку со своим проектом, после чего он запустился.
Так вот вопрос: это нормально?
В версии 3.5 ничего не требовало.
Автор: EZH
Дата сообщения: 30.01.2005 16:34
А чего за модули? *.bpl?
Ты собирала EhLib из исходников?
Автор: filja
Дата сообщения: 30.01.2005 18:25
pas, res, dfm - те, к-рые нах-ся в папке Common, к-рая принадлежит библиотеке EhLib.
Автор: YurikGL
Дата сообщения: 30.01.2005 22:19
>filja


Если правильно помню, надо в один каталог скопировать файлы из common и папочки, название которой характеризует твою делфю.
Дальше, там два файла, которые можно установить как компоненты, обычно, после получасового тыканья у меня все устанавливалось...
Автор: filja
Дата сообщения: 31.01.2005 12:32
Так и делала...
Как теперь все это убрать, чтоб заново переустановить? Component => Install Packages => Remove. И еще удалить файлы EhLib.bpl, EhLib.dcp or EhLibXX.bpl, EhLibXX.dcp, согласно мануалу. И все?


Добавлено:
Я уже разобралась, в чем дело. Я забыла сделать это: Add, (if needed) 'EhLib directory' in Tools->Environment Options->Library->Library Path.
Автор: YurikGL
Дата сообщения: 01.02.2005 06:56
>filja

Зачем? Что-то не работает?


Автор: filja
Дата сообщения: 01.02.2005 18:03
Спасибо, уже все работает. И вроде скомпилированный файл запускается, не требует супер-версии EhLib. Или еще потребует?? EhLib 3.6 Beta 2 Russian version. Full source included.
Автор: YurikGL
Дата сообщения: 01.02.2005 20:44
>Или еще потребует??

Вроде не должен...
Автор: MrZeRo
Дата сообщения: 02.02.2005 13:36
На то он и Full Source, что если потребует, то можно поправить, чтобы не требовал
Автор: filja
Дата сообщения: 02.02.2005 14:19
Аааа! Может, еще научите, и как?
Автор: vserd
Дата сообщения: 02.02.2005 14:53
filja

Цитата:
По Memo:
LoadFromFile(FileName) - это Strings, а файл F : textfile.

Еще раз. Читать мелено, по слогам, до дех пор пока не поймешь.
Если нужно загрузить текстовый файл в мемо, достаточно вызвать метод MEMO1.Loadfromfile(имя файла). все остальное мемо сделает сам.


Цитата:
Аааа! Может, еще научите, и как?

Научим. Для начинающих нужно читать книжки по языку Pascal/Object Pascal, в последних версиях переименованный в язык Delphi. Для продолжающих рекомендую Рея Конопку, Ксавье и Пачеко. И сайты в интернете. Но самое интересное находится на вашей машине, в директориях ($delphi)\help,($delphi)\Source. После этого, вы любого сможете поставить в угол.
А вобще-то достаточно прочитать сообщения об ошибках, и попытаться разобраться чтоже там буковки обозначают.

P.S. Ehlib нужно качать с русской страницы авторов, и набрать пароль большими русскими буквами. Пароль -- название второго месяца года два раза.
Автор: filja
Дата сообщения: 03.02.2005 13:29
EZH
А можно ли запомнить отфильтрованное состояние БД? Чтоб при повторном запуске программы открывалась БД с последним заданным фильтром (фильтр задается через ComboBox и Edit.Text).
Автор: vserd
Дата сообщения: 03.02.2005 13:39
filja

Цитата:
А можно ли запомнить отфильтрованное состояние БД? Чтоб при повторном запуске программы открывалась БД с последним заданным фильтром (фильтр задается через ComboBox и Edit.Text

А что мешает запомнить эти данные в файле при завершении работы, и считать их при загрузке, и заново отфильтровать?
Автор: EZH
Дата сообщения: 03.02.2005 16:00
filja
Ну собственно vserd тебе всё и ответил. Добавлю только что сохранять фильтр можно вкучу разных мест - реестр, файл, та же БД, если создать в ней свою спец таблицу для хранения всяких настроек...
Автор: filja
Дата сообщения: 03.02.2005 16:32
Так. А если отфильтровать, сохранить отфильтрованную часть в файле БД *.mdb (или в таблице в составе БД), чтоб можно было сам файл БД сгонять на дискету и носить домой, там открывать этот отфильтрованный кусок и шо хошь с ним делать?
Автор: EZH
Дата сообщения: 03.02.2005 16:38
filja
Не понял вопорос. Ну сохранила ты параметры фильтрации, например в свою таблицу в той же БД своим приложением. Ну унесла файлик домой. Там жу у тебя то же приложение есть. Бери этот файлик, читай настройки фильтрации и фильтруй.

Добавлено:
А понял, ты хочешь скидывать отфильтрованную чась в отдельную таблицу в отдельный файл? И зачем тебе так? Сохраняй только условие фильтрации, не сами отфильтрованные данные.
Автор: filja
Дата сообщения: 03.02.2005 16:50
Это меня так заставляют делать. Чтоб у них на раб стояла программа, а домой они дискетки с аксесовским файлом носили. Бред.
Автор: EZH
Дата сообщения: 03.02.2005 16:58
Ну значит дома будет только ограниченный кусок данных. Так и в чем проблема?
Автор: filja
Дата сообщения: 03.02.2005 17:00
На странице Servers есть AccessApplication. С его помощью, я так понимаю, можно творить то же, что и Вордом: создавать таблицу, в ней структуру и заносить туда отфильтрован. данные. Это оч сложно? Может, кто встречал такой пример? Мне важно знать св-ва и методы для работы с Аксес из-под Делфи.
Автор: EZH
Дата сообщения: 03.02.2005 17:05
Чем знать свойства и методы для работы с конкретной БД, лучше знать SQL - и делать всё чисто на нём через стандартизованные интерфейсы ADO, ODBC или соответствующие компоненты прямого доступа...

Создать таблицу - CREATE TABLE...
Добавить запись - INSERT INTO...
Автор: YurikGL
Дата сообщения: 04.02.2005 07:08
>На странице Servers есть AccessApplication. С его помощью, я так понимаю, можно творить то же, что и Вордом:

Только тогда тебе понадобится установленный Access на компутере, плюс, потенциальная несовместимость версий Access-a....

Так что работай через ADOCommand

Страницы: 12

Предыдущая тема: Visual Prolog 6.2


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.