Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.197.251.102] |
|
Сообщ.
#1
,
|
|
|
АКСЕСС/АДО
база+проект прилагаются Есть 3 таблицы. Их структура: Таблица Организации Id_organizacii (счетчик) Nazvanie_organizacii (текстовый) Таблица Состав организации Id_organizacii (числовой) Id_sostava (счетчик) Name (текстовый) Surname (текстовый) Таблица Данные о составе id_data (счетчик) Id_sostava (числовой) Telefon Таблицы Организации и Состав организации связаны по полю Id_organizacii как 1 ко многим, а таблица Состав организации связаны с таблицей Данные о составе по полю Id_sostava На форме у меня есть такая структура отображающая связь таблиц В DBLookupComboBox1 у меня отображается Названия организаций (берет данные из таблицы Организации). Выбрав из списка DBLookupComboBox1 название организации (к примеру ФСБ) чуть ниже у меня отображается в DBGrid1 состав данной организации. В ADOTable2 свойстве MasterSource у меня прописанDataSource1 а в свойстве MasterFields у меня прописан Id_organizacii. Связь по такому же принципу у меня и между данными из DBGrid1 и DBGrid2(в нем отображаются записи из таблицы Данные о составе) - т.е. в ADOTable3 в свойстве MasterSource у меня прописанDataSource2 а в свойстве MasterFields у меня прописан Id_sostava. Есть на этой же форме кнопки Добавить запись в Таблицу Организации, Добавить запись в Таблицу Состав организации и Добавить запись в Таблицу Данные о составе При нажатии на эти кнопки появляются соответствующие формы в которых есть Edit1(вопрос: а может использовать DBEdit1) для вписания в него новой записи в соответствющие таблицы. А также кнопки изменить записи Как заносить данные вписанные в Edit1 в соответствующий DBLookupComboBox1 или DBGrid'ы И как мне при нажатии кнопки Изменить открывать соответствующую формы в которой в Edit1 будет редактировать выделенная в DBLookupComboBox1 или DBGrid'ах запись и сохраняться изменения Прикреплённый файл123.rar (29.12 Кбайт, скачиваний: 112) |
Сообщ.
#2
,
|
|
|
В DBLookupComboBox1 и DBGrid'ы ничего заносить не надо! они ведь ОТОБРАЖАЮТ данные, хранящиеся в таблице БД => тебе нужно заносить данные в соответствующую таблицу Access.
Table1.Append; //или Table1.Edit если изменение Table1.FieldByName('Name').Value:=Edit1.Text; Table1.Post; До открытия соответствуюшей формы присваиваешь значение в Edit1: Form1.Edit1.Text:=Table1.Fields.Fields[1].AsString; Form1.Show; |
Сообщ.
#3
,
|
|
|
ADOTable.Edit; ADOTable.FieldByName('Name').AsValue := Edit1.Text; ADOTable.FieldByName('Surname').AsValue := Edit2.Text; ADOTable.Post; либо можешь в самом гриде редактировать данные или использовать DBNavigator |
Сообщ.
#4
,
|
|
|
щас буду пробовать
|
Сообщ.
#5
,
|
|
|
Спасибо - все получилось.
Возник вопрос: в форме добавления Организации после нажатия кнопки ОК (добавляет запись в Организации) На кнопке я дописываю нижележащий код, чтобы добавленная организация появилась сразу в DBlookupcombobox1 и была видна form1.DBlookupcombobox1.KeyValue:=form1.ADOTable1Id_organizacii.Value; Но если я это пишу на Редактирование Организации, то нажав на кнопку отредактировать запись изменяется а в DBlookupcombobox1 остается старый вариант и приходится сначала выбрать из DBlookupcombobox1 какую-нить другую организацию чтобы потом можно было в DBlookupcombobox1 выбрать отредактированную запись. И как при запуске программы чтобы в DBlookupcombobox1 уже была выбрана 1-ая запись из списка (т.е. чтобы DBlookupcombobox1 первоначально не был пуст) |
Сообщ.
#6
,
|
|
|
Чтобы выбиралась первая запись:
DBlookupСombobox1.ItemIndex:=0; tmp:=DBlookupСombobox1.ItemIndex; //этот DBlookupСombobox1.ItemIndex:=0; // код DBlookupСombobox1.ItemIndex:=tmp; //я не проверял А вообще я использую обычные компоненты с вкладки Standart, а то эти DB компоненты сложно контролировать (не знаю насколько это правильно!.. ) |
Сообщ.
#7
,
|
|
|
а разве у DBlookupСombobox есть свойство ItemIndex???
пишет ошибку Цитата [Error] Unit.pas(165): Undeclared identifier: 'ItemIndex' |
Сообщ.
#8
,
|
|
|
Упс... Это у DBСombobox есть... Должно и DBlookupСombobox что-то похожее быть...
Добавлено Точно не могу сказать, но свойство ListFieldIndex не подходит в замену ItemIndex? |
Сообщ.
#9
,
|
|
|
Чтобы выбиралась первая запись я сделал так:
DBLookupComboBox1.KeyValue:=1; теперь осталось только Цитата кент @ Но если я это пишу на Редактирование Организации, то нажав на кнопку отредактировать запись изменяется а в DBlookupcombobox1 остается старый вариант и приходится сначала выбрать из DBlookupcombobox1 какую-нить другую организацию чтобы потом можно было в DBlookupcombobox1 выбрать отредактированную запись. щас попробую по этой технологии Цитата Creat!ve @ tmp:=DBlookupСombobox1.ItemIndex; //этот DBlookupСombobox1.ItemIndex:=0; // код DBlookupСombobox1.ItemIndex:=tmp; //я не проверял |
Сообщ.
#10
,
|
|
|
Если что подожди кого-нибудь из более опытных! Сегодня выходной, они, наверное, все спят еще ...
|
Сообщ.
#11
,
|
|
|
temp:=mainform.DBLookupComboBox1.KeyValue; form1.DBLookupComboBox1.KeyValue:=0; form1.DBLookupComboBox1.KeyValue:=temp; сработало |
Сообщ.
#12
,
|
|
|
Есть в БД таблица с типом поля Memo(ведь в нем можно хранить картинки???). И я хочу добавить в него какую-нибудь картинку
Для начала я открываю диалоговое окно для добавления картинки ... If OpenDialog1.Execute then ... а как дальше его добавлять в поле Kartinka??? |
Сообщ.
#13
,
|
|
|
Memo хранит Lengthy text or combinations of text and numbers (длинный текст или комбинации текста и чисел)...
А вот OLE Object может хранить объект (such as a Microsoft Excel spreadsheet, a Microsoft Word document, graphics, sounds, or other binary data), наверное, может хранить и картинки, а как их туда сохранять... мне тоже стало интересно! |
Сообщ.
#14
,
|
|
|
Creat!ve
кент графические и мультимедийные данные (и не только) храняться в BLOB-field (блоб-полях)... записать в них данные и прочитать их оттуда можно так Table.Edit; Table.SaveToBlobField('Graphics.bmp'); Table.Post; Table.LoadFromBlobField('Graphics.bmp'); |
Сообщ.
#15
,
|
|
|
dron-s,
пишу вот так form1.AdoTable3.Append; form1.AdoTable3.FieldByName('Picture').SaveToBlobField('Graphics.bmp'); form1.AdoTable3.Post; ругается на SaveToBlobField - типа нет такого свойства у поля Picture тип OLE Object |
Сообщ.
#16
,
|
|
|
ну так как насчет вышеизложенного
|
Сообщ.
#17
,
|
|
|
Так нет такого свойства у TField
|
Сообщ.
#18
,
|
|
|
Цитата Anatoly Podgoretsky @ Так нет такого свойства у TField Так есть или нет ??? так тоже не проходит form.AdoTable1.fieldbyname('Picture') As TBlobField).loadfromfile(OpenDialog1.FileName); |
Сообщ.
#19
,
|
|
|
Цитата кент @ Цитата Anatoly Podgoretsky @ Так нет такого свойства у TField Так есть или нет ???[/CODE] Я что не четко, двусмысленно написал? |
Сообщ.
#20
,
|
|
|
а как же теперь сохранять картинки в поле таблицы БД Аксесса
|
Сообщ.
#21
,
|
|
|
Цитата кент @ а как же теперь сохранять картинки в поле таблицы БД Аксесса Заглянуть в FAQ. |
Сообщ.
#22
,
|
|
|
Цитата Bas @ Заглянуть в FAQ. я там смотрел. Вроде нету или плохо смотрел Bas, буду очень благодарен за ссылку |
Сообщ.
#23
,
|
|
|
Попробуй так:
(table1.fieldbyname('ddd') as TBlobField).loadfromfile('dddss'); |
Сообщ.
#24
,
|
|
|
Creat!ve, я это уже пробовал
Цитата кент @ form.AdoTable1.fieldbyname('Picture') As TBlobField).loadfromfile(OpenDialog1.FileName); |
Сообщ.
#25
,
|
|
|
Странно...
Добавлено Ты уверен, что не работает??? У меня вот эти строчки ошибок не выдают: if OpenDialog1.Execute then begin ADOTable1.Append; (ADOTable1.FieldByName('pict') as TBlobField).LoadFromFile(OpenDialog1.FileName); ADOTable1.Post; end; |
Сообщ.
#26
,
|
|
|
Цитата Creat!ve @ Ты уверен, что не работает??? А ты в какой СУБД проверял - У меня Аксес 2003 и вылаются ошибки Цитата [Error] Unit.pas(119): Undeclared identifier: 'TBlobField' [Error] Unit.pas(119): Undeclared identifier: 'LoadFromFile' Добавлено Bas, а можно ссылку из FAQ |
Сообщ.
#27
,
|
|
|
Люди - отзовитесь кто знает
|
Сообщ.
#28
,
|
|
|
Ошибка "Undeclared identifier:" означает, что ты не включил в uses нужные модули
|
Сообщ.
#29
,
|
|
|
Цитата Anatoly Podgoretsky @ Ошибка "Undeclared identifier:" означает, что ты не включил в uses нужные модули А какие нужно подключить модули если не секрет |
Сообщ.
#30
,
|
|
|
Цитата Anatoly Podgoretsky @ Ошибка "Undeclared identifier:" означает, что ты не включил в uses нужные модули и это оказалось был DB |
Сообщ.
#32
,
|
|
|
Цитата кент @ Цитата Anatoly Podgoretsky @ Ошибка "Undeclared identifier:" означает, что ты не включил в uses нужные модули и это оказалось был DB Молодец, такие вопросы ты должен разрешать сам с помощью справка, как правило нужный модуль в ней указан и в крайнем случае поиском по исходникам. |
Сообщ.
#33
,
|
|
|
Выполняется поиск по БД посредством фильтрования AdoTable:
ADOTable1.Filter := 'Фамилия='+QuotedStr(Edit1.Text); ADOTable1.Filtered:= True; А затем, при редактировании полей: ADOTable1.Edit; ADOTable1.FieldByName('Фамилия').AsString:=DBEdit1.Text; ADOTable1.post Возникает ошибка: "BOF или EOF имеет значение True, либо текущая запись удалена. Для выполнения операции требуется текущая запись." В чём дело? И как избавиться от ошибки? |
Сообщ.
#34
,
|
|
|
Выбрось ADOTable на свалку, а вместо него используй ADOQuery.
|
Сообщ.
#35
,
|
|
|
С AdoQuery не работает поиск, и при редактировании опять ошибка, но уже другая:
"AdoQuery1: Cannot perform this operation on a closed dataset" |
Сообщ.
#36
,
|
|
|
Цитата Expected } @ С AdoQuery не работает поиск то есть? Цитата Expected } @ "AdoQuery1: Cannot perform this operation on a closed dataset" а перед выполнение операции проверяли AdoQuery1.Active = true ? |
Сообщ.
#37
,
|
|
|
Цитата а перед выполнение операции проверяли AdoQuery1.Active = true ? Появляется сообщение "Missing SQL property" |
Сообщ.
#38
,
|
|
|
Expected } а запрос заполнили? свойство SQL. Или компутер сам должен догадатся какой запрос надо выполнять?
|
Сообщ.
#39
,
|
|
|
А что там должно быть указано?
|
Сообщ.
#40
,
|
|
|
Запрос для получения данных. Читать что такое SQL и в частности про SELECT, INSERT, UPDATE, DELETE. Так же смотреть сюда Базы данных с нуля
|
Сообщ.
#41
,
|
|
|
Хочю еще раз повторить, чтобы человек не наделал ошибок в будущем:
ADOTable выкинь, используй SQL запросы. Такой же совет сам получил лет 5 назад, кады начинал постигать азы работы с БД |
Сообщ.
#42
,
|
|
|
Цитата Expected } @ Появляется сообщение "Missing SQL property" напиши так AdoQuery1.SQL.Clear; AdoQuery1.SQL.Add('Select * from твоя_таблица where поле=занчение'); AdoQuery1.Active := true; |