Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.15;
Скачать: CL | DM;

Вниз

Извените если достал тупыми вопросами...еще разочек помогите   Найти похожие ветки 

 
Dark Programmer ©   (2002-06-18 06:46) [0]

procedure TForm1.BitBtn3Click(Sender: TObject);
var i:longint;
begin
dbgrid1.DataSource.DataSet.Last;
table2.edit;
table2.Insert;
for i:=dbgrid1.DataSource.DataSet.RecordCount downto 1 do
table2.FieldByName("Question").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("question").AsString;
table2.FieldByName("Answer").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("answer").AsString;
table2.FieldByName("FIO").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("fio").AsString;;
table2.Post;
quickreport3.preview;
end;

По идее должны записаться в таблицу все записи, но почему то только первая записывается, в чем я не прав?Заранее благодарен!!!


 
dimis   (2002-06-18 08:50) [1]

в корне не правильно
насколько я понимаю тебе нужно перерисать всю таблицу в обратном порядке

procedure TForm1.BitBtn3Click(Sender: TObject);
var i:longint;
begin
dbgrid1.DataSource.DataSet.Last;
table2.edit;
table2.Insert;
while not (dbgrid1.DataSource.DataSet.bof) do
begin
table2.edit;
table2.Insert;
table2.FieldByName("Question").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("question").AsString;
table2.FieldByName("Answer").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("answer").AsString;
table2.FieldByName("FIO").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("fio").AsString;;
table2.Post;
dbgrid1.DataSource.DataSet.prev;
end;
end;


 
Dark Programmer ©   (2002-06-18 09:15) [2]

Нет мне не нужно ее в обратном порядке, можно хоть в каком порядке
Но твой метод почему-то бесконца записывает, а мне нада, чтобы только те записи которые в дбгриде записались в таблицу...


 
Turalyon ©   (2002-06-18 09:16) [3]

А у тебя в DBGrid из какого компонета данные отображаются?


 
Dark Programmer ©   (2002-06-18 09:25) [4]

Из table


 
Turalyon ©   (2002-06-18 09:56) [5]

table2.Insert
Внеси это в цикл (for)


 
dimis   (2002-06-18 10:05) [6]

>>Dark Programmer
я не отвечаю за правильность кода, т.к. не использую такой подход
все обновления привык делать через запросы.
Ошибка твоя соотояла в том что ты не передвигаешь курсор в dbgrid1.DataSource.DataSet и вставляешь всегда одну и ту же запись (посленюю)


 
Turalyon ©   (2002-06-18 10:09) [7]

>>dimis
Позор на мою седую голову :) согласен. Просто просмотрел.

>>Dark Programmer
Напиши - что именно тебе необходимо...




 
Dark Programmer ©   (2002-06-18 10:09) [8]

И че это даст?


 
Dark Programmer ©   (2002-06-18 10:14) [9]

Какое обновление вы че????
procedure TForm1.BitBtn3Click(Sender: TObject);
var i:integer;
begin
dbgrid1.DataSource.DataSet.Last; // перевожу указатель в конец
table2.edit;
for i:=dbgrid1.DataSource.DataSet.RecordCount downto 1 //Этот фор поидее должен с конечной записи и по первую выполнять след: do
table2.FieldByName("Question").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("question").AsString; table2.FieldByName("Answer").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("answer").AsString; table2.FieldByName("FIO").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("fio").AsString;; table2.Post; //т.е. записать все записи в таблицу и все quickreport3.preview; // и создать на их основе отчет end;
//но проблема в том, что берется тока первая запись, а все остальные не берутся!!


 
Turalyon ©   (2002-06-18 10:17) [10]

Это даст то, что тебе смогут помочь.
А ошибка твоя (читай dimis (18.06.02 10:05))
Исправить ее можно вставив строку

table2.Post;
dbgrid1.DataSource.DataSet.prev;




 
Turalyon ©   (2002-06-18 10:20) [11]

for i:=dbgrid1.DataSource.DataSet.RecordCount downto 1 //Этот фор поидее должен с конечной записи и по первую выполнять
Почему ты так решил?
Этот for не влияет на курсор в таблице.. он влияет только на i..
лучше все это переписать используя while (IMHO)


 
fool ©   (2002-06-18 10:22) [12]

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
dbgrid1.DataSource.DataSet.First;
while not dbgrid1.DataSource.DataSet.Eof do
begin
table2.Insert;
table2.FieldByName("Question").AsString: =dbgrid1.DataSource.DataSet.fieldbyname("question").AsString;
table2.FieldByName("Answer").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("answer").AsString;
table2.FieldByName("FIO").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("fio").AsString;
table2.Post;
dbgrid1.DataSource.DataSet.Next;
end;
end;
Но я обычно не dbgrid1.DataSource.DataSet.fieldbyname, а Query.fieldbyname(Table.fieldbyname)


 
fool ©   (2002-06-18 10:30) [13]

Кстати на будущее, активнее хелпом пользуйся, тогда сможешь не только с записями из "дбгрида" пользоваться :)

procedure UndeleteAll(DataSet: TBDEDataSet);
begin
with DataSet do
begin
UpdateRecordTypes := [rtDeleted]; {make only deleted records visible}
try
First; {move to beginning of dataset}
while not EOF do
begin
RevertRecord; {undelete the current record}
Next; {move to the next record}
end;
finally
UpdateRecordTypes := [rtModified, rtInserted, rtUnmodified];
end;
end;
end


 
dimis   (2002-06-18 10:46) [14]

>>Darc
в принципе и твоим кодом можно воспользоваться , только слегка модифицировать

procedure TForm1.BitBtn3Click(Sender: TObject);
var i:longint;
begin
dbgrid1.DataSource.DataSet.Last;
table2.edit;
table2.Insert;
for i:=dbgrid1.DataSource.DataSet.RecordCount-1 downto 0 do
dbgrid1.DataSource.DataSet.RecNo=i;
table2.FieldByName("Question").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("question").AsString;
table2.FieldByName("Answer").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("answer").AsString;
table2.FieldByName("FIO").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("fio").AsString;;
table2.Post;
quickreport3.preview;
end;

обрать внимание на параметры цикла и на добавленную строчку


 
fool ©   (2002-06-18 10:58) [15]

> Dimis
забыл в цикле begin ... end, insert - тоже в цикл, и еще, я не работаю обычно с RecordCount , а пользую while not Q.Eof - так надежнее...


 
fool ©   (2002-06-18 11:01) [16]

> Dimis
И зачем перед Insert еще и Edit?


 
Dark Programmer ©   (2002-06-18 11:09) [17]

Уважаемые программеры, весьма благодарен за большое кол-во ответов и советов!!!
Я понял в чем моя ошибка вот код:
procedure TForm1.BitBtn3Click(Sender: TObject);
var i:longint;
begin
dbgrid1.DataSource.DataSet.Last;
for i:=dbgrid1.DataSource.DataSet.RecordCount downto 1 do
begin
table2.Append;
table2.FieldByName("Question").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("question").AsString;
table2.FieldByName("Answer").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("answer").AsString;
table2.FieldByName("FIO").AsString:=dbgrid1.DataSource.DataSet.fieldbyname("fio").AsString;;
table2.Post;
dbgrid1.DataSource.DataSet.Prior;
end;
Я просто не добавил перемещения по записям :)


 
ALFA   (2002-06-18 17:42) [18]

Table2.append -добавление
Table2.Post - не нужен



Страницы: 1 вся ветка

Текущий архив: 2002.07.15;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
3-47169
Adventure
2002-06-13 16:58
2002.07.15
Бред сивой кобылы........................


1-47396
Андрусь
2002-07-01 12:51
2002.07.15
Подскажите message


1-47516
rumata_lee
2002-07-04 16:59
2002.07.15
QReport


3-47232
Sam
2002-06-17 19:58
2002.07.15
Мастера, помогите запустить параметрический запрос


14-47758
badbyte
2002-06-11 16:50
2002.07.15
Shareware