Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.09.2012, 13:30
kerby666 kerby666 вне форума
Прохожий
 
Регистрация: 12.09.2012
Сообщения: 20
Репутация: 10
По умолчанию Из DBGrid в Memo

Здравствуйте! Есть DBGrid. Есть переменные (например Х), которым нужно присваивать значение столбца ('Price' например) ASCyrrency построчно в цикле. Т.е. перебираем построчно значения ячеек нужного столбца и значение первой строки столбца 'Price' присваиваем переменной Х. Значение Х соответственно с переходом на новую строку тоже меняется. Не могу никак разобраться . Или можно просто запихать значения всего столбца в MEMO без мультиселекта. Это тоже не могу вкурить.

Последний раз редактировалось kerby666, 12.09.2012 в 13:33.
Ответить с цитированием
  #2  
Старый 12.09.2012, 13:38
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от kerby666
Здравствуйте! Есть DBGrid. Есть переменные (например Х), которым нужно присваивать значение столбца ('Price' например) ASCyrrency построчно в цикле. Т.е. перебираем построчно значение ячейки нужного столбца и значение первой строки столбца 'Price' присваиваем переменной Х. Значение Х соответственно с переходом на новую строку тоже меняется. Не могу никак разобраться . Спасибо!
У таблиц не строки, а записи.
Код:
  DataSet.Next; // Перейти к следующей записи
  DataSet.Prior; // Перейти к предыдущей записи
  DataSet.First; // Перейти к первой записи
  DataSet.Last; // Перейти к последней записи

  DataSet.Edit; // Начать редактирование записи
  DataSet.FieldByName('Price').AsCurrency := X; // Внести данные
  DataSet.Post; // Сохранить запись в базу
Ответить с цитированием
  #3  
Старый 12.09.2012, 13:39
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Код:
Table1.First;
while not Table1.Eof do 
  begin
  Table1.Edit;
  x:=Table1.FieldByName('price').AsCurrency;
  Tabel1.Next;
  end;
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз

Последний раз редактировалось Yurk@, 12.09.2012 в 13:42.
Ответить с цитированием
  #4  
Старый 12.09.2012, 14:16
kerby666 kerby666 вне форума
Прохожий
 
Регистрация: 12.09.2012
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от Yurk@
Код:
Table1.First;
while not Table1.Eof do 
  begin
  Table1.Edit;
  x:=Table1.FieldByName('price').AsCurrency;
  Tabel1.Next;
  end;
Забито две строки. Заносит значение последней записи только. Т.е. второй
P.S. Допилил! И все как надо! Спасибо!!!

Последний раз редактировалось kerby666, 12.09.2012 в 14:38.
Ответить с цитированием
  #5  
Старый 12.09.2012, 14:39
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от kerby666
Или можно просто запихать значения всего столбца в MEMO без мультиселекта. Это тоже не могу вкурить.
"Просто" нельзя, нужно "вручную" в цикле "запихивать":
Код:
begin
  Memo1.Lines.Clear;
  Table1.First;
  while not Table1.Eof do
  begin
    Memo1.Lines.Add(Table1.FieldByName('Price').AsString);
    Table1.Next;
  end;
end;

Цитата:
Сообщение от Yurk@
Код:
Table1.First;
while not Table1.Eof do 
  begin
  Table1.Edit;
  x:=Table1.FieldByName('price').AsCurrency;
  Tabel1.Next;
  end;
Table1.Edit тут лишний. Первоначально было правильно.
Цитата:
Сообщение от kerby666
Забито две строки. Заносит значение последней записи только. Т.е. второй
А что должно заносить? Переменная одна, а записи две, понятно что в этой переменной останется то, что заносили последним.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
kerby666 (12.09.2012)
  #6  
Старый 12.09.2012, 14:44
kerby666 kerby666 вне форума
Прохожий
 
Регистрация: 12.09.2012
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
"Просто" нельзя, нужно "вручную" в цикле "запихивать":
Код:
begin
  Memo1.Lines.Clear;
  Table1.First;
  while not Table1.Eof do
  begin
    Memo1.Lines.Add(Table1.FieldByName('Price').AsString);
    Table1.Next;
  end;
end;


Table1.Edit тут лишний. Первоначально было правильно.
А что должно заносить? Переменная одна, а записи две, понятно что в этой переменной останется то, что заносили последним.


Это понятно, что последнее останется. Но первая запись и не попадала никуда. Сейчас все ОК! Я безумно рад!!!
Ответить с цитированием
  #7  
Старый 12.09.2012, 14:48
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от kerby666
Это понятно, что последнее останется. Но первая запись и не попадала никуда.
Она попадала в переменную X, просто потом эта переменная затиралась содержимым второй записи. (У тебя 2 записи, поэтому содержимое цикла while..end срабатывает дважды)

Забыл ещё дописать :

А чтобы переменная X не затиралась, а например суммировалась, нужно делать так:
Код:
begin
  x := 0;
  Table1.First;
  while not Table1.Eof do
  begin
    x := x + Table1.FieldByName('Price').AsCurrency;
    Table1.Next;
  end;
end;

Последний раз редактировалось poli-smen, 12.09.2012 в 14:55.
Ответить с цитированием
  #8  
Старый 12.09.2012, 17:31
kerby666 kerby666 вне форума
Прохожий
 
Регистрация: 12.09.2012
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Она попадала в переменную X, просто потом эта переменная затиралась содержимым второй записи. (У тебя 2 записи, поэтому содержимое цикла while..end срабатывает дважды)

Забыл ещё дописать :

А чтобы переменная X не затиралась, а например суммировалась, нужно делать так:
Код:
begin
  x := 0;
  Table1.First;
  while not Table1.Eof do
  begin
    x := x + Table1.FieldByName('Price').AsCurrency;
    Table1.Next;
  end;
end;

Мне и нужно было, чтоб затиралась.
Ответить с цитированием
  #9  
Старый 12.09.2012, 17:41
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от kerby666
Мне и нужно было, чтоб затиралась.
Нужно было чтобы переменная X затиралась? Т.е. тебе нужно чтобы в переменной X было значение из последней записи что-ли?
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
kerby666 (12.09.2012)
  #10  
Старый 12.09.2012, 17:44
kerby666 kerby666 вне форума
Прохожий
 
Регистрация: 12.09.2012
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Нужно было чтобы переменная X затиралась? Т.е. тебе нужно чтобы в переменной X было значение из последней записи что-ли?
Именно! Я же написал, что все работает так как надо. Спасибо!
Ответить с цитированием
  #11  
Старый 12.09.2012, 17:51
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от kerby666
Именно! Я же написал, что все работает так как надо. Спасибо!
Ну если тебе нужно значение только последней записи тогда всё ещё проще :
Код:
  Table1.Last;
  x := Table1.FieldByName('Price').AsCurrency;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter