Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi и базы данных

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 4.81
Landser
57 / 7 / 1
Регистрация: 18.04.2009
Сообщений: 352
#1

Приёмы работы с ADO таблицей - Delphi БД

10.02.2010, 21:32. Просмотров 7428. Ответов 16
Метки нет (Все метки)

Доброго времени суток.вот какой весьма насущный вопрос возник:
имеется бд на MSSQL сервере,с помощью AdoConnection,ADOTable,ADOQuery и тд я связал её с delphi.
также в дельфийском проекте есть форма бланк, в которой юзер забивает информацию в edit.а вот как сделать так, чтобы при нажатии кнопки добавить ифнормация записанная в edit записывалась в опред. поля в таблицу бд, например из edit1 в поле фамилия, из edit2 в поле имя итд
подскажите пожалуйста, это действительно очень надо..

и ещё маленький вопросик:тк в вышеозначенную базу заносят данные юзеры с разных компов, то как сделать так, чтобы dbgrid, в который через ADO пишутся эти данные раз в 15 секунд например обновлялся??
спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2010, 21:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приёмы работы с ADO таблицей (Delphi БД):

Приёмы работы с zexmlss - Delphi БД
Нужно выводить отчёт из БД в таблицу, в которой есть объединённые ячейки, форматирование, перенос по строкам и пр. Для быстроты выгрузки...

Форма с таблицей - Delphi БД
Добрый день, немного информации) БД Access компоненты ADOConnection, DataSource, ADOQuery, DBGrid. Form1 (главная форма) Form2...

Связь с таблицей - Delphi БД
Помогите!!!!!! Я создал таблицу(Table2) в Access (связь ADO) в которой первое поле Variant (null, тип счетчик), а второе NomerZadachi . ...

Работа с большой таблицей - Delphi БД
Здравствуйте! Уважаемые программисты и профессионалы, заинтересовала меня тема по поводу изменений данных в таблице. Таблица содержит...

Поиск связаный с др. таблицей - Delphi БД
Всем привет ! Делаю кое - какой проект и сразу появилась трудность, суть проблемы такова: Есть база данных в Access файле, которая...

Связка компонента DateTimePicker с таблицей - Delphi БД
Здравствуйте! Я новичок в Delphi и БД. Как сделать, чтобы запись из DateTimePicker автоматически сразу же переносилась в DBGrid ? Спасибо!

16
SAMZ
1261 / 704 / 13
Регистрация: 21.12.2009
Сообщений: 2,255
11.02.2010, 10:20 #2
Если надо внести изменения в текущую запись, то можно так
Delphi
1
2
3
4
ADOTable.Edit;
ADOTable.FieldByName('здесь имя поля_1').AsString := Edit1.Text; 
ADOTable.FieldByName('здесь имя поля_2').AsString := Edit2.Text; 
ADOTable.post;
Если необходимо добавить запись, то можно так
Delphi
1
2
3
4
ADOTable.Insert;
ADOTable.FieldByName('здесь имя поля_1').AsString := Edit1.Text; 
ADOTable.FieldByName('здесь имя поля_2').AsString := Edit2.Text; 
ADOTable.post;
Ваш второй маленький вопросик намного сложнее. Можно на клиенте делать рефреш(обновление) набора данных с какой - то периодичностью. Не знаю, позволяют ли это компоненты ADO, но некоторые библиотеки позволяют рефрешить текущую запись, например, по событию BeforEdit. Ннекоторые сервера, например FB, поддерживают технологию асинхронной обработки событий. При этом на клиенте можно получать инфу о том, что некоторый объект БД изменился, но этим нужно пользоваться осторожно.
1
Ex_Soft
107 / 107 / 3
Регистрация: 28.01.2009
Сообщений: 481
11.02.2010, 11:37 #3
Цитата Сообщение от SAMZ Посмотреть сообщение
Delphi
1
ADOTable
IMHO, будет гораздо полезнее сразу научиться прямохождению без костылей/ходунков TTable, а, уж, в случае ADO - тем более.
Цитата Сообщение от SAMZ Посмотреть сообщение
этим нужно пользоваться осторожно.
+1
Хотелось бы даже добавить: Вы не должны этого хотеть. В общем случае только для очень узкого/специфичного круга задач необходим такой функционал. Для повального же большинства в нем необходимости - нЭт.
1
SAMZ
1261 / 704 / 13
Регистрация: 21.12.2009
Сообщений: 2,255
11.02.2010, 11:43 #4
Цитата Сообщение от Ex_Soft Посмотреть сообщение
Хотелось бы даже добавить: Вы не должны этого хотеть. В общем случае только для очень узкого/специфичного круга задач необходим такой функционал. Для повального же большинства в нем необходимости - нЭт.
Да, согласен!!!
1
Landser
57 / 7 / 1
Регистрация: 18.04.2009
Сообщений: 352
11.02.2010, 13:27  [ТС] #5
Спасибо большое Вам, SAMZ!!!Вы даже и не представляйте как Вы мне помогли
а вот:
Если надо внести изменения в текущую запись, то можно так
Delphi
1
2
3
4
ADOTable.Edit;
ADOTable.FieldByName('здесь имя поля_1').AsString := Edit1.Text; 
ADOTable.FieldByName('здесь имя поля_2').AsString := Edit2.Text; 
ADOTable.post;
тут у меня возник вопрос: вот я хочу внести изменения,а куда мне их вносить,можно так сделать,чтобы при клике на строку грида, в которую я хочу внести изменения,появилась форма бланка, и в ней уже я буду по указанному Вами способу редактировать,это сложно так сделать?? или проще можно?
и подскажите пожалуйста, это наверное просто,как удалить запись ,наверно как то аналогично?
спасибо
Ex_Soft,
Хотелось бы даже добавить: Вы не должны этого хотеть. В общем случае только для очень узкого/специфичного круга задач необходим такой функционал. Для повального же большинства в нем необходимости - нЭт. Ex_Soft
никакой специфики нет)просто я не знаю, если я буду добавлять у себя записи, на удалённом компе они сразу появяться или нет, протестировать пока нет возможности просто
спасибо
0
Андрей Борисови
708 / 396 / 18
Регистрация: 04.10.2009
Сообщений: 1,683
11.02.2010, 13:32 #6
обновление таблицы:
1. таймер на 15 секунд, в нем пропишите - изменилось ли кол-во строк таблицы (добавили/удалили). если да - обновляем.
2. Таймер на 1 мин. Принудительно обновляет таблицу.
3. В момент, когда открылась форма заполнения эдитов - выполнить процедурку обновления таблицы. Под формой - почти и невидно
1
taxo
5 / 5 / 0
Регистрация: 14.09.2009
Сообщений: 79
11.02.2010, 15:10 #7
имеется бд на MSSQL сервере,с помощью AdoConnection,ADOTable,ADOQuery и тд я связал её с delphi.
также в дельфийском проекте есть форма бланк, в которой юзер забивает информацию в edit.а вот как сделать так, чтобы при нажатии кнопки добавить ифнормация записанная в edit записывалась в опред. поля в таблицу бд
Delphi
1
2
3
4
5
Если необходимо добавить запись, то можно так
ADOTable.Insert;
ADOTable.FieldByName('здесь имя поля_1').AsString := Edit1.Text; 
ADOTable.FieldByName('здесь имя поля_2').AsString := Edit2.Text; 
ADOTable.post;
Вопрос есть по этой же теме! Я соединил форму свою с SQLSer2005 через ADOConn и ADOQuery.. Спрограмулил одну процедуру и данные,что мне нужны, есть в переменной например res! А как теперь передать эти данные из переменной добавить в поле в табл в Бд! Спасибо.
1
Андрей Борисови
708 / 396 / 18
Регистрация: 04.10.2009
Сообщений: 1,683
11.02.2010, 15:16 #8
А вы не мучайтесь:
Если есть SELECT, то есть и UPDATE
Механизм АДО и был ориентирован на SQL-запросы. Поддержка прямого доступа к данным - не приветствуется (выкл свет, упала винда...) а SQL-запрос - кратковременный доступ.
Вот и работаем с ним)
1
taxo
5 / 5 / 0
Регистрация: 14.09.2009
Сообщений: 79
11.02.2010, 16:06 #9
А вы не мучайтесь:
Если есть SELECT, то есть и UPDATE
Механизм АДО и был ориентирован на SQL-запросы. Поддержка прямого доступа к данным - не приветствуется (выкл свет, упала винда...) а SQL-запрос - кратковременный доступ.
Вот и работаем с ним)
Да мне уже пофиг..=)
Procedure...
res:=p; <---вот это значение нужно добавить в Table1,4столбец-name ParamFromDelphi
............................
Delphi
1
2
3
4
5
with AdoQuery1 do begin
Close;
AdoQuery1.SQL.Text:='INSERT INTO Table1(ParamFromDelphi) Values(:ParamFromDelphi)';
AdoQuery1.Parameters[3].Value:=res;
ExecSQL;
Что не так подскажи те пожалуйста, а то уже целый день сижу, не могу ничего придумать и не получается.. =(

Добавлено через 1 минуту
Ошибка кстати выход: List index out of bounds, хотя всё верно и нигде не используется..
1
SAMZ
1261 / 704 / 13
Регистрация: 21.12.2009
Сообщений: 2,255
11.02.2010, 16:12 #10
Цитата Сообщение от Landser Посмотреть сообщение
вот я хочу внести изменения,а куда мне их вносить,можно так сделать,чтобы при клике на строку грида, в которую я хочу внести изменения,появилась форма бланка, и в ней уже я буду по указанному Вами способу редактировать,это сложно так сделать??
Да, можно, конечно! Но, думаю, Вам надо почитать литературу. Уж очень элементарные вопросы Вы задаете.
Если по существу, то есть туча вариантов реализации того, о чем Вы пишете. Можно, например обрабатывать событие TDBGrid OnDbClick. По этому событию открывать некоторую форму. У Grid есть свойство SelectedField, то есть при клике Вы знаете на каком поле Вы кликнули. Зная поле, легко связать его с Edit, ну и т.д. Тут можно фантазировать и придумывать что угодно. У композиторов всего 7 нот, а сколько симфоний написано.
1
Landser
57 / 7 / 1
Регистрация: 18.04.2009
Сообщений: 352
12.02.2010, 10:37  [ТС] #11
Цитата Сообщение от SAMZ Посмотреть сообщение
Да, можно, конечно! Но, думаю, Вам надо почитать литературу. Уж очень элементарные вопросы Вы задаете.
Если по существу, то есть туча вариантов реализации того, о чем Вы пишете. Можно, например обрабатывать событие TDBGrid OnDbClick. По этому событию открывать некоторую форму. У Grid есть свойство SelectedField, то есть при клике Вы знаете на каком поле Вы кликнули. Зная поле, легко связать его с Edit, ну и т.д. Тут можно фантазировать и придумывать что угодно. У композиторов всего 7 нот, а сколько симфоний написано.
я извиняюсь за простой вопрос,OnDbClick как раз то событие,что мне и надо,я использую свойство SelectedField и при клике на поле говорю
Delphi
1
2
form2.show;
form2.edit1.text:=dbbgrid1.selectedfield.asstring
а вот как мне раскидать по другим edit этой появляющейся формы другие поля этого грида,а не только выбранный?
добросовестно изучал литературу Delphi5, Бобровский там про dbgrid полстранички всего..
1
SAMZ
1261 / 704 / 13
Регистрация: 21.12.2009
Сообщений: 2,255
12.02.2010, 11:31 #12
Тут тоже могут быть варианты. Можно, например, использовать свойство columns DBGrid
Например DBGrid.Columns[0] это первый столбец и.т.д. У Column есть свойство FieldName. Если Edit1 у Вас должен быть привязан к первой колонке грида, то фисация изменений
Delphi
1
DBGrid.DataSuorce.DataSet.FieldByName(DBGrid.Columns[0] .FieldName).Value := Edit1.Text;
Можно использовать для этих целей свойство Fields DBGrid. Можно и вообще не привязываться к гриду. Если всегда жестко Edit1 редактирует поле Name, то
Delphi
1
DBGrid.DataSuorce.DataSet.FieldByName('NAME').Value := Edit1.Text;
Посмотри внимательно свойсва Columns, я не уверен, что индекс начинает отсчитываться с 0
2
Life_Master
7 / 7 / 0
Регистрация: 22.10.2009
Сообщений: 51
12.02.2010, 12:20 #13
Цитата Сообщение от SAMZ Посмотреть сообщение
я не уверен, что индекс начинает отсчитываться с 0
начинает отчет с 0
2
Landser
57 / 7 / 1
Регистрация: 18.04.2009
Сообщений: 352
12.02.2010, 12:33  [ТС] #14
Спасибо за ответ!
а где здесь
Delphi
1
DBGrid.DataSuorce.DataSet.FieldByName(DBGrid.Columns[0] .FieldName).Value := Edit1.Text;
и здесь
Delphi
1
DBGrid.DataSuorce.DataSet.FieldByName('NAME').Value := Edit1.Text;
обозначается,что я поле именно текущей строки пишу в edit?
0
SAMZ
1261 / 704 / 13
Регистрация: 21.12.2009
Сообщений: 2,255
12.02.2010, 12:39 #15
Цитата Сообщение от Landser Посмотреть сообщение
поле именно текущей строки пишу в edit?
Если Вы в гриде стали на какую - либо строку, то и для привязанного к нему DataSet эта строка является текущей
1
12.02.2010, 12:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2010, 12:39
Привет! Вот еще темы с ответами:

Работа с таблицей из базы данных - Delphi БД
Есть готовая база данных, но я не знаю как данные из таблицы использовать в форме. Например мне нужно из базы данных - DB.mdb, таблица -...

Связать каждую кнопку с таблицей - Delphi БД
Здравствуйте, помогите мне пожалуйста. Мне нужно связать каждую кнопку с таблицей.

NumPy, некоторые приёмы работы - Python
Делюсь. Когда-то для коллег сделал презентацию, по работе с NumPy. Описаны приёмы работы с NumPy для людей, которые знают...

параллельность работы с таблицей - C++ Builder БД
Собвстенно добрый вечер всем. Есть проблема. Есть таблица, запущено 2 копии программы, которые заполняют поля в таблице. Ситуация : человек...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru