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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.05.2013, 22:12
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию Вывести значения в DBgRid

Всем добрый вечер! Ну или ночь) Имеется код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 q,w,e:TStrings;
 i: integer;
begin
 q:= TStringList.Create; 
 w:= TStringList.Create;
 e:= TStringList.Create;
with Memo1.Lines do
 for i:=0 to Count-1 do
  begin
   q.DelimitedText:= Strings[i];
   if q.count>5 then w.values[q[0]]:= IntToStr(StrToIntDef(w.values[q[0]],0)+ StrToInt(q[4]));
   if q.count>6 then e.values[q[0]]:= IntToStr(StrToIntDef(e.values[q[0]],0)+ StrToInt(q[5]));
  end;
 Label1.Caption:=w.Text;
 Label2.Caption:=e.Text;
 q.Free;
 w.Free;
 e.Free;
end;
Как правильно вывести в DBgrid значения w и e?
Например во второй столбец W в третий E

После обработки текст выглядит так
Код:
User1=цифры( Label1.Caption:=w.Text;)
User1=цифры( Label2.Caption:=e.Text;)

Надо перевести в DBgrid но чтоб было так:
Код:
User1 | цифры( Label1.Caption:=w.Text;) | цифры( Label2.Caption:=e.Text;)

Помогите в решении этой не лёгкой для меня задачи.
Ответить с цитированием
  #2  
Старый 13.05.2013, 00:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,026
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

На сколько я вижу, имеет место непонимание того момента, что DBGrid предназначен для работы с базами данных (есть вариант "прикрутить" данные из памяти, но все равно это делается через наследника DataSet).

Т.О. тут 2 варианта.
1. Используем все-таки TStringGrid.
2. Складываем данные в БД (можно просто в памяти, ищи компонент TMemTable или используй TClientDataSet, в нем можно, вроде, все оставить в памяти, не выгружать на диск) и пользуемся TDBGrid.

Ну и еще вариант, что ты сам не пониаешь, чего хочешь.
Можешь описать задачу нормальным языком, без своих вариантов, только задачу и то, что должно получиться.
Ответить с цитированием
  #3  
Старый 13.05.2013, 01:13
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Все несколько проще. Не надо ничего тут лишнего изобретать, все просто как топор.
1. Исходный файл не надо грузить в мемо - это лишнее.
2. На форму добавляете AdoQuery.
2.1. В ConnectionString пишете:
Код:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=J:\;Extended Properties="Text;HDR=No";Persist Security Info=False
Только вместо J:\ указываем путь к вашему файлу.
2.1. В SQL пишете запрос:
Код:
select  F1,F2,F3,F4,Sum(F5) as F5, Sum(F6) as F6 from Test1#txt
group by F1,F2,F3,F4
На форму добавляете DBGrid,DataSource. Связываете все это хозяйство как обычно.
3.Запускаем и хрюкаем от счастья.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
cezer (13.05.2013)
  #4  
Старый 13.05.2013, 01:52
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Здесь всё прикольнее, чем может показаться, ТСу просто нужно из мемо распарсить строки в таблицу, в соседней теме он это довольно подробно объяснил. Предложенный код меня не вдохновил, поэтому, всё равно, всё по своему сделал, не смог от такого удержаться:

На форме должны быть кнопка, мемо и стрингрид (вкладка палитры компонентов Additional -> StringGrid)

Код:
procedure TForm1.Button1Click(Sender: TObject);
 function nu(ds: string): string;
  begin
   Result:= Copy(ds, 1, pos(',', ds)-1);
  end;
var
 i, b, b5, b6: integer;
 sl, sv, su: TStrings;
 flg: boolean;
begin
 su:= TStringList.Create;
 sv:= TStringList.Create;
 sl:= TStringList.Create;

 for i := 0 to Memo1.Lines.Count-1 do
  begin
   flg:=true;

   for b := 0 to su.Count-1 do
    if nu(Memo1.Lines.Strings[i]) = su.Strings[b] then flg:= false;

   if flg then su.Add(nu(Memo1.Lines.Strings[i]));
 end;

   StringGrid1.RowCount:=su.Count+1;

   for b := 0 to su.Count-1 do
    begin
     sv.Clear;
     for i := 0 to Memo1.Lines.Count-1 do
      if nu(Memo1.Lines.Strings[i]) = su.Strings[b] then
         sv.Add(Memo1.Lines.Strings[i]);

      b5:= 0;
      b6:= 0;

      for i := 0 to sv.Count-1 do
       begin
        sl.Text:= StringReplace(sv.Strings[i],',',#10,[rfReplaceAll]);
        inc(b5, StrToInt(sl.Strings[4]));
        inc(b6, StrToInt(sl.Strings[5]));
       end;

     StringGrid1.Cells[1, b+1]:= su.Strings[b];
     StringGrid1.Cells[2, b+1]:= IntToStr(b5);
     StringGrid1.Cells[3, b+1]:= IntToStr(b6);
    end;

 sl.Free;
 sv.Free;
 su.Free;
end;
Оно работает, проверено электроникой
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
cezer (13.05.2013)
  #5  
Старый 13.05.2013, 08:25
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
Смех

Цитата:
Сообщение от Alegun
...
Alegun как всегда в теме и Ведь все работает) Всем спасибо в частности Alegun!!!!!
Ответить с цитированием
  #6  
Старый 13.05.2013, 11:52
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Работает, я тоже читал оба ваших поста и как я писал еще чуть ранее - это неверное изначально решение. Вы сначала создаете трудности, а потом их преодолеваете. Вот зачем загонять текст в Мемо, если можно сразу к нему обращаться как таблице и делать нужный вам запрос? Как это сделать я объяснил, (весь код 2 строчки) но видимо вы читаете только последние сообщения. Печально.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 13.05.2013 в 11:55.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
cezer (13.05.2013)
  #7  
Старый 13.05.2013, 12:54
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
...
Страдалец к тебе встречный вопрос. У меня файл от куда я беру данные находится в сети в расшаренной папке. когда задаю путь

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\192.168.1.2\Log\log.txt;Extended Properties="Text;HDR=No";Persist Security Info=False

Он ругается что файл не доступен... Как с этим быть?
Ответить с цитированием
  #8  
Старый 13.05.2013, 13:01
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Правильно ругается. Задается не файл, а путь к нему. Имя файла в запросе используется. Смотрите внимательнее мой пример.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
cezer (13.05.2013)
  #9  
Старый 13.05.2013, 13:05
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Правильно ругается. Задается не файл, а путь к нему. Имя файла в запросе используется. Смотрите внимательнее мой пример.
Если имя содержет тире он не принимает этот фалй(((( а у меня файл с именем в котором есть тире
Ответить с цитированием
  #10  
Старый 13.05.2013, 13:06
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
...
select F1,F2,F3,F4,Sum(F5) as F5, Sum(F6) as F6 from 06-02-13-#lgs
group by F1,F2,F3,F4
Ответить с цитированием
  #11  
Старый 13.05.2013, 13:11
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
...
Твой пример самый классный прости что сомневался в твоём примере! сейчас проверил с txt файлом он его читает и подключается все работает на ура... Но с другими файлами не получается в частности *.lgs
Ответить с цитированием
  #12  
Старый 13.05.2013, 13:59
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Попробуй взять имя файла в квадратные скобки:
Код:
select F1,F2,F3,F4,Sum(F5) as F5, Sum(F6) as F6 from [06-02-13-#lgs]
group by F1,F2,F3,F4
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
cezer (13.05.2013)
  #13  
Старый 13.05.2013, 15:27
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
...
Обновление не возможно База Даных или обйект доступны только для чтения! (((
Ответить с цитированием
  #14  
Старый 13.05.2013, 16:01
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
...
Пробовал из сети копировать на диск C:\ прописывал пути к файлу и название файла все равно пишет что: Обновление не возможно база данных или объект доступны только для чтения.
Ответить с цитированием
  #15  
Старый 13.05.2013, 16:43
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
...
из за того что в имени тире - он не может нормально прочитать путь файл... Квадратные скобки ничего не дали(( меня имя на 123.txt выводит данные( а тем именем работать не хочет(((
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter