Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi и базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 4.81
Landser
57 / 7 / 4
Регистрация: 18.04.2009
Сообщений: 366
#1

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

10.02.2010, 21:32. Просмотров 8075. Ответов 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
Нужно выводить отчёт из БД в таблицу, в которой есть объединённые ячейки,...

Форма с таблицей
Добрый день, немного информации) БД Access компоненты ADOConnection,...

Связь с таблицей
Помогите!!!!!! Я создал таблицу(Table2) в Access (связь ADO) в которой первое...

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

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

Работа с таблицей из базы данных
Есть готовая база данных, но я не знаю как данные из таблицы использовать в...

16
SAMZ
1261 / 704 / 61
Регистрация: 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 / 15
Регистрация: 28.01.2009
Сообщений: 481
11.02.2010, 11:37 #3
Цитата Сообщение от SAMZ Посмотреть сообщение
Delphi
1
ADOTable
IMHO, будет гораздо полезнее сразу научиться прямохождению без костылей/ходунков TTable, а, уж, в случае ADO - тем более.
Цитата Сообщение от SAMZ Посмотреть сообщение
этим нужно пользоваться осторожно.
+1
Хотелось бы даже добавить: Вы не должны этого хотеть. В общем случае только для очень узкого/специфичного круга задач необходим такой функционал. Для повального же большинства в нем необходимости - нЭт.
1
SAMZ
1261 / 704 / 61
Регистрация: 21.12.2009
Сообщений: 2,255
11.02.2010, 11:43 #4
Цитата Сообщение от Ex_Soft Посмотреть сообщение
Хотелось бы даже добавить: Вы не должны этого хотеть. В общем случае только для очень узкого/специфичного круга задач необходим такой функционал. Для повального же большинства в нем необходимости - нЭт.
Да, согласен!!!
1
Landser
57 / 7 / 4
Регистрация: 18.04.2009
Сообщений: 366
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 / 33
Регистрация: 04.10.2009
Сообщений: 1,687
11.02.2010, 13:32 #6
обновление таблицы:
1. таймер на 15 секунд, в нем пропишите - изменилось ли кол-во строк таблицы (добавили/удалили). если да - обновляем.
2. Таймер на 1 мин. Принудительно обновляет таблицу.
3. В момент, когда открылась форма заполнения эдитов - выполнить процедурку обновления таблицы. Под формой - почти и невидно
1
taxo
5 / 5 / 1
Регистрация: 14.09.2009
Сообщений: 80
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 / 33
Регистрация: 04.10.2009
Сообщений: 1,687
11.02.2010, 15:16 #8
А вы не мучайтесь:
Если есть SELECT, то есть и UPDATE
Механизм АДО и был ориентирован на SQL-запросы. Поддержка прямого доступа к данным - не приветствуется (выкл свет, упала винда...) а SQL-запрос - кратковременный доступ.
Вот и работаем с ним)
1
taxo
5 / 5 / 1
Регистрация: 14.09.2009
Сообщений: 80
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 / 61
Регистрация: 21.12.2009
Сообщений: 2,255
11.02.2010, 16:12 #10
Цитата Сообщение от Landser Посмотреть сообщение
вот я хочу внести изменения,а куда мне их вносить,можно так сделать,чтобы при клике на строку грида, в которую я хочу внести изменения,появилась форма бланка, и в ней уже я буду по указанному Вами способу редактировать,это сложно так сделать??
Да, можно, конечно! Но, думаю, Вам надо почитать литературу. Уж очень элементарные вопросы Вы задаете.
Если по существу, то есть туча вариантов реализации того, о чем Вы пишете. Можно, например обрабатывать событие TDBGrid OnDbClick. По этому событию открывать некоторую форму. У Grid есть свойство SelectedField, то есть при клике Вы знаете на каком поле Вы кликнули. Зная поле, легко связать его с Edit, ну и т.д. Тут можно фантазировать и придумывать что угодно. У композиторов всего 7 нот, а сколько симфоний написано.
1
Landser
57 / 7 / 4
Регистрация: 18.04.2009
Сообщений: 366
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 / 61
Регистрация: 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 / 1
Регистрация: 22.10.2009
Сообщений: 51
12.02.2010, 12:20 #13
Цитата Сообщение от SAMZ Посмотреть сообщение
я не уверен, что индекс начинает отсчитываться с 0
начинает отчет с 0
2
Landser
57 / 7 / 4
Регистрация: 18.04.2009
Сообщений: 366
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 / 61
Регистрация: 21.12.2009
Сообщений: 2,255
12.02.2010, 12:39 #15
Цитата Сообщение от Landser Посмотреть сообщение
поле именно текущей строки пишу в edit?
Если Вы в гриде стали на какую - либо строку, то и для привязанного к нему DataSet эта строка является текущей
1
Biggemot
163 / 141 / 23
Регистрация: 28.12.2009
Сообщений: 367
12.02.2010, 18:00 #16
Цитата Сообщение от taxo Посмотреть сообщение
Что не так подскажи те пожалуйста, а то уже целый день сижу, не могу ничего придумать и не получается.. =(
Delphi
1
2
3
4
5
with AdoQuery1 do begin
Close;
SQL.Text:='INSERT INTO Table1(ParamFromDelphi) Values('+res+')';
ExecSQL;
end;
только следи какого типа поле в БД и переменная
1
Landser
57 / 7 / 4
Регистрация: 18.04.2009
Сообщений: 366
12.02.2010, 21:38  [ТС] #17
спасибо всем огромное за помощь, особенно SAMZ за весьма дельные ответы на мои тупые вопросы))
а того, чего хотел добился ,как нестранно,так :
Delphi
1
2
3
4
5
6
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
 form2.Edit1.Text:=dbgrid1.Fields[0].asstring ;
 form2.Edit2.Text:=dbgrid1.Fields[1].asstring ;
 form2.Edit3.Text:=dbgrid1.Fields[2].asstring ;//и т.д.
end;
ещё раз спасибо
1
12.02.2010, 21:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2010, 21:38
Привет! Вот еще темы с решениями:

Отображение Memo-полей таблицей
Как лучше отобразить Memo-поля в строках таблицы, чтобы это выглядело как в...

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

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

Работа с таблицей внутри приложения
Есть таблица depositform, в ней поле didvidens которое должно обновляться...


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

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

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