Форум: "Базы";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
ВнизИзвените если достал тупыми вопросами...еще разочек помогите Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c