Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-47738
serg
2002-06-11 10:13
2002.07.15
работа


1-47321
AlexSh
2002-06-27 12:11
2002.07.15
Как в отчете выделить строки?


14-47674
Kozerog
2002-06-13 13:46
2002.07.15
Parent:=(Self); ???


1-47409
AL2002
2002-06-21 21:59
2002.07.15
Курсоры


1-47323
Алибаба
2002-07-01 11:49
2002.07.15
помогите мне





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский