Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обращение к данным DataSet, Как обратиться ко всем колонкам 
V
    Опции темы
Sazz
Дата 27.11.2012, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 11.10.2012

Репутация: нет
Всего: нет



Доброго времени суток!!! Такая проблема, есть код который кодирует данные DataSet, всё работает нормально, вот только код работает для одной колонки, а хотелось бы сделать так чтобы действия применялись ко всем колонкам??? Дело в том что мы изначально не знаем сколько колонок будет, так как загружается необходимый файл в DBGrid, через TTable и DataSourse, как сделать чтобы код прошёлся по всем колонкам (заранее не известным)??? Помогите разобраться 4 день не могу решить проблему(((( Буду очень признателен за любую помощь!

Вот Код:
var
 s : string;
 z: integer;

DBGrid1.DataSource.DataSet.First;
while not DBGrid1.DataSource.DataSet.Eof do
Begin
s := DBgrid1.DataSource.DataSet.Fields[z].AsString;
 DBgrid1.DataSource.DataSet.Edit;
  s:=update_win(s);
 DBgrid1.DataSource.DataSet.Fields[z].AsString:=s;
DBGrid1.DataSource.DataSet.next;

 smile 
PM MAIL   Вверх
Данкинг
Дата 27.11.2012, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Код

for i:=0 to DataSet.FieldCount -1 do 
 sss=DataSet.Fields[i];


Добавлено через 50 секунд
Кстати, .Edit вижу, а .Post - нет.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Sazz
Дата 27.11.2012, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 11.10.2012

Репутация: нет
Всего: нет



Ошибка:
List index out of bounds (31)

PM MAIL   Вверх
Данкинг
Дата 27.11.2012, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



На какой строке ошибка? Код целиком покажи.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Sazz
Дата 27.11.2012, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 11.10.2012

Репутация: нет
Всего: нет



Ошибку выбивает сразу после нажатия
procedure TForm3.Button3Click(Sender: TObject);
begin

if Table1.TableName = ''   then
begin
ShowMessage('Файл не загружен!') ;
end;
if Table1.TableName <>  ''    then
begin
z:=StrToInt(Edit1.Text);
DBGrid1.DataSource.DataSet.First;

for i:=0 to DBgrid1.DataSource.DataSet.FieldCount -1 do
s := DBgrid1.DataSource.DataSet.Fields[i].AsString;
while not DBGrid1.DataSource.DataSet.Eof do
Begin
for i:=0 to DBgrid1.DataSource.DataSet.FieldCount -1 do
s := DBgrid1.DataSource.DataSet.Fields[i].AsString;
DBgrid1.DataSource.DataSet.Edit;
  s:=update_dos(s);
  DBgrid1.DataSource.DataSet.Post;
DBgrid1.DataSource.DataSet.Fields[i].AsString:=s;
DBGrid1.DataSource.DataSet.next;

end;
end;
   end;



А вот сама функция update_dos(s):
function TForm3.update_dos(s: string): string;
begin
 i:=1; c:='';
  while i< length(s)+1 do begin l:=ord(s[i]);
   inc(i);
    if (l>=128) and (l<=192)then l:=l+64 else
     if (l>=224) and (l<240) then l:=l+16 else
      if l=241 then l:=184 else
       if l=240 then l:=168;
        dd:=chr(l); c:=c+dd;
         end;
          update_dos:=c;
end;
но с ней всё в порядке!

Добавлено через 3 минуты и 4 секунды
Извини с опечаткой скинул, вот: 
procedure TForm3.Button3Click(Sender: TObject);
begin

if Table1.TableName = ''   then
begin
ShowMessage('Файл не загружен!') ;
end;
if Table1.TableName <>  ''    then
begin
z:=StrToInt(Edit1.Text);
DBGrid1.DataSource.DataSet.First;

while not DBGrid1.DataSource.DataSet.Eof do
Begin
for i:=0 to DBgrid1.DataSource.DataSet.FieldCount -1 do
s := DBgrid1.DataSource.DataSet.Fields[i].AsString;
DBgrid1.DataSource.DataSet.Edit;
  s:=update_dos(s);
  DBgrid1.DataSource.DataSet.Post;
DBgrid1.DataSource.DataSet.Fields[i].AsString:=s;
DBGrid1.DataSource.DataSet.next;

end;
end;
   end;
PM MAIL   Вверх
superVad
Дата 27.11.2012, 12:52 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Sazz, пожалуйста прочитай - ссылка.
PM MAIL   Вверх
Данкинг
Дата 27.11.2012, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Цитата(Sazz @  27.11.2012,  13:02 Найти цитируемый пост)
Ошибку выбивает сразу после нажатия

Что-то не верится. Может быть, таблица не открыта?

Добавлено через 1 минуту и 56 секунд
И вообще эти строчки местами надо поменять, думается мне:
Код

DBgrid1.DataSource.DataSet.Post;
DBgrid1.DataSource.DataSet.Fields[i].AsString:=s;


Добавлено через 3 минуты и 12 секунд
И эти тоже:
Код

DBGrid1.DataSource.DataSet.next;

end;



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Sazz
Дата 27.11.2012, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 11.10.2012

Репутация: нет
Всего: нет



Нет всё открыто! сейчас выдаёт
ту же ошибку но с другими параметрами:
List index out of bounds (2), в загружаемой таблице тоже 2 колонки!

procedure TForm3.Button3Click(Sender: TObject);
begin

if Table1.TableName = ''   then
begin
ShowMessage('Файл не загружен!') ;
end;
if Table1.TableName <>  ''    then
begin

DBGrid1.DataSource.DataSet.First;
while not DBGrid1.DataSource.DataSet.Eof do
Begin
for z:=0 to DBgrid1.DataSource.DataSet.FieldCount -1 do
s := DBgrid1.DataSource.DataSet.Fields[z].AsString;
DBgrid1.DataSource.DataSet.Edit;
  s:=update_dos(s);
  DBgrid1.DataSource.DataSet.Post;
DBgrid1.DataSource.DataSet.Fields[z].AsString:=s;
DBGrid1.DataSource.DataSet.next;


end;

   end;

Добавлено через 11 минут и 31 секунду
Строки местами поменял, но ничего не поменялось.
PM MAIL   Вверх
Данкинг
Дата 27.11.2012, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Да, про FieldName я и забыл:
Код

while not DBGrid1.DataSource.DataSet.Eof do
Begin
for z:=0 to DBgrid1.DataSource.DataSet.FieldCount -1 do
 begin 
  DBgrid1.DataSource.DataSet.Edit;
  DBgrid1.DataSource.DataSet.FieldByNumber(z).AsString:=update_dos(DBgrid1.DataSource.DataSet.FieldByNumber(z).AsString); 
  DBgrid1.DataSource.DataSet.Post;
 end;
 DBGrid1.DataSource.DataSet.next;
end;


Это сообщение отредактировал(а) Данкинг - 27.11.2012, 15:12


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Sazz
Дата 27.11.2012, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 11.10.2012

Репутация: нет
Всего: нет



[Error] Unit3.pas(97): Undeclared identifier: 'FieldByNumber'
PM MAIL   Вверх
Данкинг
Дата 27.11.2012, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Код

DBgrid1.DataSource.DataSet.Fields.FieldByNumber(z).AsString:=update_dos(DBgrid1.DataSource.DataSet.Fields.FieldByNumber(z).AsString);



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Sazz
Дата 27.11.2012, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 11.10.2012

Репутация: нет
Всего: нет



---------------------------
Seconds
---------------------------
Access violation at address 004C77C0 in module 'Seconds.exe'. Read of address 00000000.
---------------------------
ОК   
---------------------------

PM MAIL   Вверх
Данкинг
Дата 27.11.2012, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Ну, "Access violation" - это уже точно не ко мне.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
northener
Дата 27.11.2012, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Sazz @  27.11.2012,  16:56 Найти цитируемый пост)
Access violation at address 004C77C0 in module 'Seconds.exe'. Read of address 00000000.

Читать внимательно Access Violation в деталях


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Sazz
Дата 28.11.2012, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 11.10.2012

Репутация: нет
Всего: нет



Спасибо!!!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1630 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.