Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Строки в DBGrid и не только [D6, Paradox]


Страницы:   1 2

eclipse ©   (2006-05-05 05:47:00) 

Приветствую =)

У меня к Вам такой вопрос... или даже несколько небольших вопросов... сразу прошу прощения если они слишком просты но всё же...

На форме есть DBGrid и кнопка внести изменения... по выделению какого либо поля, то есть скорее всего с помощью SelectedField в другую форму должна передаваться вся строка... не выделенное поле а вся строка (Number|Name|OEM etc Number - ключевое)... и в переданной форме некоторые поля например количество будет изменяться с помощью updown и при нажатии на кнопку изменения отражатся в форме где сам DBGrid и занесутся в другую таблицу изменений вместе с датой изменения....
А также интересно узнать как можно по имеющемуся полю цены в уях автоматически заполнить соседнее поле умножив уи на курс...

заранее огромное спасибо


eclipse   (2006-05-08 08:09:00) [1]

to Хозяин
а я уже разобрался =) спасибо огромное за примеры...

и про Table1.DataSource.DataSet конечно верно... всё не так должно было быть записано...


Хозяин   (2006-05-06 16:43:00) [2]

Вот это вообще понять, что-to не могу:

Table1.DataSource.DataSet


Хозяин   (2006-05-06 16:38:00) [3]

Опять косяк, запутался с такой конструкцией Form_table.Table1.DataSource.DataSet

вот:

procedure TForm_changes.Button1Click(Sender: TObject);
begin
 if Form_table.Table1.DataSource.State in [dsInsert,dsEdit] then
   Form_table.Table1.DataSource.DataSet.Post;
 close;
end;

И в обработчике закрытия окна сделай

if Form_table.Table1.DataSource.State in [dsInsert,dsEdit] then
Form_table.Table1.DataSource.DataSet.Cancel;


Хозяин   (2006-05-06 16:35:00) [4]

Ошибочка
if Form_table.Table1.DataSource.State ...

И в обработчике закрытия окна сделай

if DataSet.State in [dsInsert,dsEdit] then
 Form_table.Table1.DataSource.DataSet.Cancel;


Хозяин   (2006-05-06 16:31:00) [5]

eclipse ©   (06.05.06 13:26) [21] [Новое сообщение]
procedure TForm_changes.Button1Click(Sender: TObject);
begin
Form_table.Table1.DataSource.DataSet.Edit;
Form_table.Table1.DataSource.DataSet.Fields[1].AsString := DBEditEh1.Text;
Form_table.Table1.DataSource.DataSet.Fields[2].AsString := DBEditEh2.Text;
Form_table.Table1.DataSource.DataSet.Fields[3].AsString := DBEditEh3.Text;
Form_table.Table1.DataSource.DataSet.Fields[4].AsString := DBEditEh4.Text;
Form_table.Table1.DataSource.DataSet.Post;
end;

eclipse ©   (06.05.06 13:46) [23]
... я пробовал писать в обработчике просто =)

procedure TForm_changes.Button1Click(Sender: TObject);
begin
Form_table.Table1.DataSource.DataSet.Edit;
Form_table.Table1.DataSource.DataSet.Post;
end;

но ошибка так и остаётся после нажатия на кнопку...


procedure TForm_changes.Button1Click(Sender: TObject);
begin
 if DataSet.State in [dsInsert,dsEdit] then
   Form_table.Table1.DataSource.DataSet.Post;
end;

?


evvcom   (2006-05-06 15:00:00) [6]


> Form_table.Table1.DataSource.DataSet

Очень интересная конструкция! Особенно для новичка. Что такое Table1? Самое простое, что приходит в голову, что есть форма Form_table, на ней лежат TDataSource и какой-то DataSet, судя по всему TTable (назовем его MyTable). Тогда доступ становится гораздо проще:
Form_table.MyTable
Чего мудрить?


Sergey13   (2006-05-06 14:41:00) [7]

2 [26] eclipse ©   (06.05.06 14:38)
>... попробовал несколько вариантов обработчика и всё равно access violated...

Мы их все видели и потому сочувствуем. 8-)


eclipse   (2006-05-06 14:38:00) [8]

... попробовал несколько вариантов обработчика и всё равно access violated...


MsGuns   (2006-05-06 14:05:00) [9]

>eclipse ©   (06.05.06 13:26) [21]
>Form_table.Table1.DataSource.DataSet.Fields[1].AsString := DBEditEh1.Text;

Такой формат вообще-то порочен. Во-первых потому, что из кода совершенно неясен типполя, во-вторых нет никакого контроля правильности введенного пользователем в Эдит значения, в третьих - [22] последний абзац.

И еще замечания по коду общего плана:

1. Категорически не рекоментую обзывать адресуемые в кодеобъекты "как делфа назвала". Из наименования объекта должно быть извлечено максимум информации даже "посторонним" программистом.
Например, имя объекта TTable - tbPhoneDir
Советую почитать на эту тему соответствующую литературу. Например, того же Тексейру.

2. Использование TxxTable методологически порочно, т.к. создает у неопытного программиста иллюзию, что "он хозяин в доме" (таблице). Что в корне неверно при разработке многопользовательских приложений. Особенно в клиент-серверных технологиях. Если есть стремление научиться писать что-то посложнее телефонного справочника, то сразу надо ориентироваться на доступ к базам запросами.

3. Нельзя в коде обращаться к экземплярам объектов, т.к. нет гарантии, что этот объект в ран-тайме в единственном числе (как пример - динамически создаваемые дочки-"близнецы" в MDI-приложениях.

4. Всю логику обмена данными с БД рекомендуется выносить из форм-"клиентов" в датамодули. По принципу один датамодуль на одно соединение (базу данных). В нем же располагать код извлечения, посылки изменений и т.д данных "сервера". В ссылки на конкретные датасеты передавать одним из вх.параметров.

5. Конструкции, подобные [21] не только "тяжелы" для глаз и порою делают код просто зубодробительным, но еще и чрезвычайно "глюкоопасны", т.к. при малейших изменениях требуют повышенное внимание и кучу времени и нервом. Грамотнее писать так:

with Form_table.Table1.DataSource.DataSet do
  begin
   Edit;
   Fields[1].AsString := DBEditEh1.Text;
   Fields[2].AsString := DBEditEh2.Text;
   Fields[3].AsString := DBEditEh3.Text;
   Fields[4].AsString := DBEditEh4.Text;
   Post;
 end;


Sergey13   (2006-05-06 13:54:00) [10]

2[23] eclipse ©   (06.05.06 13:46)
Если по русски написать твою процедуру, то получится
1.Разрешить изменения
2.Зафиксировать изменения
И между ними НИЧЕГОне происходит. Edit вызывается автоматом, когда ты правишь в DBEdit.


eclipse   (2006-05-06 13:46:00) [11]

... я пробовал писать в обработчике просто =)

procedure TForm_changes.Button1Click(Sender: TObject);
begin
Form_table.Table1.DataSource.DataSet.Edit;
Form_table.Table1.DataSource.DataSet.Post;
end;

но ошибка так и остаётся после нажатия на кнопку...

FieldByname... и в правду проще и нагляднее =) его и буду юзать... =)


Sergey13   (2006-05-06 13:37:00) [12]

2[21] eclipse ©   (06.05.06 13:26)
>Form_table.Table1.DataSource.DataSet.Fields[1].AsString := DBEditEh1.Text;
Такая запись была бы нормальной, если вместо ДБЕдит ты использовал просто Едит. А так ты полю присваиваешь его же отображение. Если ты менял что-то в ДБедитах, то тут достаточно
Form_table.Table1.DataSource.DataSet.Post;

>Fields[4]
Я бы предложил юзать FieldByName - просто и более наглядно и не зависит от положения поля в датасете.


eclipse   (2006-05-06 13:26:00) [13]

procedure TForm_changes.Button1Click(Sender: TObject);
begin
Form_table.Table1.DataSource.DataSet.Edit;
Form_table.Table1.DataSource.DataSet.Fields[1].AsString := DBEditEh1.Text;
Form_table.Table1.DataSource.DataSet.Fields[2].AsString := DBEditEh2.Text;
Form_table.Table1.DataSource.DataSet.Fields[3].AsString := DBEditEh3.Text;
Form_table.Table1.DataSource.DataSet.Fields[4].AsString := DBEditEh4.Text;
Form_table.Table1.DataSource.DataSet.Post;
end;


Sergey13   (2006-05-06 13:11:00) [14]

2 [19] eclipse ©   (06.05.06 13:01)
Вообще Ганз прав - тебе бы книжек почитать очень не помешало.

>где в обработчие описаны все эти методы
Прям все? Уже интересно. Давай код смотреть.


eclipse   (2006-05-06 13:01:00) [15]

но например изменив поле Количество и нажав на кнопку Сохранить изменения где в обработчие описаны все эти методы... изменения либо не происходят... либо выдаётся ошибка access violated


MsGuns   (2006-05-06 12:50:00) [16]

Закат солнца вручную или освоение работы с БД в единственной ветке форума без книг, статей, справок и т.д.


Sergey13   (2006-05-06 12:43:00) [17]

2[16] eclipse ©   (06.05.06 12:33)
>или всё не так???
Все так. Если помнить, что это не единственные методы (как тут не раз уже меня справедливо поправляли).
Form_table.DataSource1.DataSet.Edit; - перевод текущей записи в режим редактирования

Form_table.DataSource1.DataSet.Insert;
или Form_table.DataSource1.DataSet.Append;
- вставка новой записи и перевод указателя текущей записи на нее и перевод ее (записи) в режим редактирования.

Form_table.DataSource1.DataSet.Post; - фиксирование изменений в текущей записи

Form_table.DataSource1.DataSet.Refresh; -обновление (перечитывание) записи(ей) - работает не везде.


eclipse   (2006-05-06 12:33:00) [18]

если у сета основные методы insert edit и post то получается в обработчике кнопки нада писать что то вроде этого

Form_table.DataSource1.DataSet.Edit;
Form_table.DataSource1.DataSet.Post;
Form_table.DataSource1.DataSet.Refresh;

???

или всё не так???


Sergey13   (2006-05-06 12:06:00) [19]

2[13] eclipse ©   (06.05.06 11:26)
>а теперь встал вопрос как эти изменённые эдиты вставить в тэйбл и в нужную запись...

Они ссылаются на текущую записьи показывают ее содержимое. Изменение коснется ее же.

2[14] MsGuns ©   (06.05.06 11:30)
Критикан, блин. К тому же не конструктивный. 8-)

>Вот, блин, а я, дурак, их вообще не использую ;)
Это проблемы твои, а не датасета. 8-)

>Например о том, что есть транзакции и как они функционируют
Ага, особенно в Парадоксе. 8-)


MsGuns   (2006-05-06 11:30:00) [20]

>Sergey13 ©   (05.05.06 11:43) [7]
>ДатаСет - образ набора данных из БД на клиенте.

Нет. Датасет может не иметь ничего общего ни с одной из таблиц БД.

>Основные методы работы Insert, Edit, Delete и Post.

Прямо-таки основные ? Вот, блин, а я, дурак, их вообще не использую ;)

>а последний фиксирует изменения образа в самой БД (с последним не все однозначно и зависит от многих факторов, но в общем случае примерно так).

Даже примерно не так. Такие советы исключительно вредны для начинающих, т.к. отучают их думать. Например о том, что есть транзакции и как они функционируют

;)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо