![]() |
|
![]() ![]() ![]() |
|
FelistA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.4.2005 Где: Кирово-Чепецк Репутация: нет Всего: нет |
Привет всем! Начала делать свою прогу, и столкнулась с такой проблемой. Извините, может кому-то она покажется пустяковой, но я в базах данных ничего не понимаю.
Дело в том, что мне нужно из компонента Edit добавить текст написанный пользователем в базу данных Paradox. А как это делается, даже понятия не имею. Может кто-то знает, помогите пожалуйста. ![]() |
|||
|
||||
Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
Вам для начала стоит почитать про работу с базами данных в какой нибудь книжке. С нуля, объяснять слишком долго.
-------------------- Все знать невозможно, но хочется |
|||
|
||||
HAS |
|
||||
Ing ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 1.3.2005 Где: Internet Репутация: нет Всего: 2 |
согласен, вот моя попытка ! Такс... для начала научимся подключать бд, я тут напишу как это делается, если что не таполучается, отвечу, по мере возможности 1 ![]() 1. Создаешь базу данных. 2. Вместе с Delphi идет программа BDE Administrator, там нажимаешь Ctr + N, в появившемся диалоговом окне выбираешь Standart, с права ты должна увидеть PATH жмешь на него ишешь свою бд, нажимаешь ок, сохраняешь и выходишь (по умолчанию имя будет STANDART. 3. Запускаешь Delphi. 4. На вкладке Data Access выбираешь компонент DataSource1 и кидаешь его на форму. 5. На вкладке BDE выбираешь компонент Table1 и так же кидаешь его на форму. 6. У компонента Table1 имеется DatabaseName, там выбираешь свою базу данных, в нашем случае STANDART. 7. В TableName надо найти имя своей таблицы. 8. Active=True 9. У DataSource1 DataSet=Table1 10. На вкладке Data Controls выбираешь DBGrid1 и также кидаешь ее на форму. 11. DataSouce=DataSource1 12. Кинь еще кнопочку, например Button1, щелкни 2 раза на кнопке и впиши следующий код
Итак с подключением и отображением бд закончили, теперь нам надо добавить запись, делается это следующим образом: 1. Создаешь еще одну форму. 2. пишешь uses unit1, что бы вторая форма "видела" первую ! 3. На вкладке DataControls выбираешь компонент dbedit1, dbedt это тот же edit, но для работы с бд ! 4. У dbedit1 имеется DataSource, там выбираешь DataSource1, т.е. DataSource=DataSource1. 5. В DataField ставишь нужную тебе колонку из твое бд. и на каждую нужную тебе колонку проделываешь этот шаг (4) 6. Размещаешь кнопочку с Caption='Добавить'. ФУууФ, вот вроде и все, пишу по пямяти, могут быть опечатки, но если что не понятно, спрашивай, отвечу по мере возможности ![]() Добавлено @ 22:12 абсолютно согласен с Петрович'ом ! И еще имеется множество статей для начинающих, автор которых Vit, смотри в красную рамочку ! Это сообщение отредактировал(а) HAS - 20.7.2005, 22:13 |
||||
|
|||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Ещё проще
Абсолютно согласен с Петровичем! |
|||
|
||||
FelistA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.4.2005 Где: Кирово-Чепецк Репутация: нет Всего: нет |
Привет. Спасибо тем кто откликнулся. Я сегодня попробую что-нибудь сделать, если что еще напишу.
Но насчет того что я базы не знаю, вы все слишком буквально приняли. Начальные знания я имею, иначе вообще не совалась в это. Но все же спасибо HAS за то, что он все подробно так описал. Спасибо. ![]() Книжки я тоже листала. Архангельского брала, правочную Дельфи (слышали о такой?), но почему-то там ничего не нашла. |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 14 Всего: 207 |
-------------------- 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 |
|||
|
||||
HAS |
|
|||
Ing ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 1.3.2005 Где: Internet Репутация: нет Всего: 2 |
FelistA, да незачто ! ![]() |
|||
|
||||
FelistA |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.4.2005 Где: Кирово-Чепецк Репутация: нет Всего: нет |
Возникла следующая проблема, при нажатии на кнопку «Принять», выскакивает следующая ошибка.
Project raised exception class EDataBaseError with message "Table1 Cannot perform this operation on a closed dataset" Process stoped. Если делать так как сказал HAS форма "виснет", т.е. вообще не реагирует ни на что. Исходный код:
Пробовала добавить:
Подскажите, что я деляю не так. |
||||
|
|||||
HAS |
|
|||
Ing ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 1.3.2005 Где: Internet Репутация: нет Всего: 2 |
![]() я вообще-то редлагал вместо edit'a использовать dbedit |
|||
|
||||
k2s |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 23.2.2005 Репутация: нет Всего: нет |
Так вроде-бы должно работать:
Это сообщение отредактировал(а) k2s - 23.7.2005, 01:23 |
|||
|
||||
FelistA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.4.2005 Где: Кирово-Чепецк Репутация: нет Всего: нет |
Да я и dbedit использовала, та же ошибка. Хотя я не совсем поняла, что прописать на второй форме для выхода и сохранения. А форма потом перестает реагировать на нажатие кнопок. |
|||
|
||||
HAS |
|
|||
Ing ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 1.3.2005 Где: Internet Репутация: нет Всего: 2 |
м...
а ты попробуй кнопочки BitBtn и свойство Kind=bkOK -> добавить запись Kind=bkCancel ->отмена действий |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 14 Всего: 207 |
![]() -------------------- 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 |
|||
|
||||
FelistA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.4.2005 Где: Кирово-Чепецк Репутация: нет Всего: нет |
Спасибо, почитала, и уже давно кстати. |
|||
|
||||
HAS |
|
|||
Ing ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 1.3.2005 Где: Internet Репутация: нет Всего: 2 |
выложи код, посмотрим
![]() |
|||
|
||||
HAS |
|
|||
Ing ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 1.3.2005 Где: Internet Репутация: нет Всего: 2 |
FelistA , я тут примерчик для тебя накатал, но прицепить не могу,почему-то
![]() напиши свой e-mail я пришлю ![]() |
|||
|
||||
FelistA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.4.2005 Где: Кирово-Чепецк Репутация: нет Всего: нет |
Мой mail [email protected]
Исходный код напишу позже. Пыталась сделать так как в статье написано, ошибка та же самая. Кто нибудь мне обьяснит что она означает? ![]() |
|||
|
||||
HAS |
|
|||
Ing ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 1.3.2005 Где: Internet Репутация: нет Всего: 2 |
что за ошибка ?
|
|||
|
||||
HAS |
|
|||
Ing ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 1.3.2005 Где: Internet Репутация: нет Всего: 2 |
FelistA, пример выслал на е-mail
![]() |
|||
|
||||
Albinos_x |
|
||||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 1 Всего: 108 |
переводится:
у тебя Table1.TableName:='GetCurentDir+имя_БД'; //если в том же каталоге или: + путь от каталога в котором лежит прога такое есть? или ищи ошибку в названии поля... Это сообщение отредактировал(а) Albinos_x - 29.7.2005, 20:38 -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
||||
|
|||||
HAS |
|
|||
Ing ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 1.3.2005 Где: Internet Репутация: нет Всего: 2 |
FelistA , ну как работает ?
![]() |
|||
|
||||
FelistA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.4.2005 Где: Кирово-Чепецк Репутация: нет Всего: нет |
Бррр... У меня ступор, голова перестала соображать, так бывает когда долго над одним делом работаю, устрою себе недельный перерыв и продолжу. Никто не против???
![]() HAS спасибо за пример посмотрела, вот только базу не может найти. Но это дело поправимое. ![]() ![]() |
|||
|
||||
Sett |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 20.12.2004 Где: Подольск Репутация: нет Всего: нет |
FelistA, смотри как я делал, если ты используешь Table1, DataSource и DBGrid1 компоненты.
можно зделать всё очень просто пример: Form1.DBGrid1.DataSource.DataSet.Edit; // разрешаем произвести редактирование в таблице Form1.DBGrid1.DataSource.DataSet.First; // переносим курсор в начало таблицы Form1.DBGrid1.DataSource.DataSet.Insert; // добавляем пустую ячейку в которую добавим свой текст Form1.DBGrid1.DataSource.DataSet.Edit; // подтверждаем редактирование повторно. Form1.DBGrid1.DataSource.DataSet.Fields[0].Text:=Edit1.Text; // добавляешь текст из Edit1.Text Form1.DBGrid1.DataSource.DataSet.Fields[1].Text:=Label1.Caption; // или добавляешь текст из Label1.Caption Form1.DBGrid1.DataSource.DataSet.Fields[3].Text:=Form1.Caption; // или добавляешь текст из Form1.Caption нет разницы Form1.DBGrid1.DataSource.DataSet.Post; // подтверждаешь и сохраняешь все внесёные изменения. Обрати внимание на Fields[0], филдс может быть и с другой цифрой цифра ознчает номер поля, куда вносится текст: Fields[0], Fields[1], Fields[2], Fields[3], Fields[4], для каждого грубо говоря Edit1.Text свой филдс код ставишь под кнопку и всё, проще не бывает. только не забудь! в Form1.Create добавить Table1.Open; |
|||
|
||||
Петрович |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
А можно еще проще ![]()
1. После First (строка 2), датасет переведенный в режим редактирования строкой 1, автоматически переключится в режим просмотра. Отсюда, первая строка бессмысленна. 2. First (строка 2) не нужен. Поскольку в реляционных БД понятие порядок записей отсутствует, то и вставка записи (строка 3) может производиться в любое место, не обазательно в начало. 3. После Edit (строка 4), датасет переведенный в режим вставки строкой 3, автоматически переключится в режим реадктирования текущей записи, а то и вообще даст Exception. И еще. Обращение к полям по индексу (Fields[0], Fields[1], Fields[2], Fields[3], Fields[4], ...) это дурной тон, который может принести проблемы. Например, если в таблице изменится порядок и состав полей, то придется лазить по всему тексту программы и изменять индексы. Да и запутаться легко. Лучше либо обращаться по именам полей:
Либо обращаться к объектам полей созданным во время дизайна. Последнее даже лучше, поскольку как минимум будет быстрее. -------------------- Все знать невозможно, но хочется |
||||||
|
|||||||
Veniamin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 3.3.2005 Репутация: нет Всего: нет |
Подскажите и мне пожалуйста. Пишу приложение на Delphi для работы с базой в Access, соединение с базой через ADO. Добавление/редактирование записей в главной таблице и которая отображается реализовано след.образом: есть главная форма, на ней по кнопке вызывается форма для добавления/редактирования уже имеющейся записи. На этой форме есть Edit-ы и возле каждого кнопка для вызова соответствующего справочника и выбора из него нужной записи. Код добавления записи по вышеприведённым примерам работает. Вот мой код для кнопки добавить:
Программу делал по книге, в Delphi новичок, прошу пожалуйста подсказать/помочь. Как можно реализовать редактирование записи. DBNavigator-ом устанавливаем курсор на записи необходимой для редактирования, затем вызывается кнопкой на главной форме "редактировать" форма для добавления/редактирования. Как сделать так, чтобы в Edit-ах на этой форме отображались данные текущей записи в таблице и чтоб их можно было редактировать (как это реализовано у меня путём выбора записей из справочников)? Если бы писал на SQL 2000, то можно в SQL-е сделать хранимые процедуры на SQL языке, потом в Delphi в DataModule их вызывать и вообщем есть код для этого в книге. Но есть ли такая возможность, если база в Access, а не в SQL 2000? Или как это можно сделать по-другому, к примеру процедура не вызвывается с сервера SQL, а уже хранится в приложении Delphi? Аналогично интересует вопрос удаления записи. p.s. Как отображать текущие данные в форме и редактировать их в ней разобрался сам, осталось с удалением решить. Это сообщение отредактировал(а) Veniamin - 22.4.2008, 16:07 |
|||
|
||||
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Добавлено через 1 минуту и 5 секунд
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |