|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Вывести значения в 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; Например во второй столбец W в третий E После обработки текст выглядит так Код:
User1=цифры( Label1.Caption:=w.Text;) User1=цифры( Label2.Caption:=e.Text;) Надо перевести в DBgrid но чтоб было так: Код:
User1 | цифры( Label1.Caption:=w.Text;) | цифры( Label2.Caption:=e.Text;) Помогите в решении этой не лёгкой для меня задачи. |
#2
|
|||
|
|||
На сколько я вижу, имеет место непонимание того момента, что DBGrid предназначен для работы с базами данных (есть вариант "прикрутить" данные из памяти, но все равно это делается через наследника DataSet).
Т.О. тут 2 варианта. 1. Используем все-таки TStringGrid. 2. Складываем данные в БД (можно просто в памяти, ищи компонент TMemTable или используй TClientDataSet, в нем можно, вроде, все оставить в памяти, не выгружать на диск) и пользуемся TDBGrid. Ну и еще вариант, что ты сам не пониаешь, чего хочешь. Можешь описать задачу нормальным языком, без своих вариантов, только задачу и то, что должно получиться. |
#3
|
||||
|
||||
Все несколько проще. Не надо ничего тут лишнего изобретать, все просто как топор.
1. Исходный файл не надо грузить в мемо - это лишнее. 2. На форму добавляете AdoQuery. 2.1. В ConnectionString пишете: Код:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=J:\;Extended Properties="Text;HDR=No";Persist Security Info=False 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 3.Запускаем и хрюкаем от счастья. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
cezer (13.05.2013)
|
#4
|
||||
|
||||
Здесь всё прикольнее, чем может показаться, ТСу просто нужно из мемо распарсить строки в таблицу, в соседней теме он это довольно подробно объяснил. Предложенный код меня не вдохновил, поэтому, всё равно, всё по своему сделал, не смог от такого удержаться:
На форме должны быть кнопка, мемо и стрингрид (вкладка палитры компонентов 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
|
|||
|
|||
Цитата:
|
#6
|
||||
|
||||
Работает, я тоже читал оба ваших поста и как я писал еще чуть ранее - это неверное изначально решение. Вы сначала создаете трудности, а потом их преодолеваете. Вот зачем загонять текст в Мемо, если можно сразу к нему обращаться как таблице и делать нужный вам запрос? Как это сделать я объяснил, (весь код 2 строчки) но видимо вы читаете только последние сообщения. Печально.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 13.05.2013 в 11:55. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
cezer (13.05.2013)
|
#7
|
|||
|
|||
Цитата:
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
|
||||
|
||||
Правильно ругается. Задается не файл, а путь к нему. Имя файла в запросе используется. Смотрите внимательнее мой пример.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
cezer (13.05.2013)
|
#9
|
|||
|
|||
Цитата:
|
#10
|
|||
|
|||
Цитата:
group by F1,F2,F3,F4 |
#11
|
|||
|
|||
Цитата:
|
#12
|
||||
|
||||
Попробуй взять имя файла в квадратные скобки:
Код:
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
|
|||
|
|||
Цитата:
|
#14
|
|||
|
|||
Цитата:
|
#15
|
|||
|
|||
Цитата:
|