Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как вставить данные в определенном месте


Автор: Teran 23.5.2006, 15:38
Использую Ado компоненты
Этим кодом добавляю строку в базу
Код

ADOTable1.Insert;
ADOTable1.findfield('Test1').AsString:= Str1;
ADOTable1.findfield('Test2').AsString:=Str2;
ADOTable1.Post;

и она появляется в dbGrid-e в низу 

Как можно вставить строку например между 2 и 3 строками?
 smile  smile  smile  

Автор: Teran 23.5.2006, 16:18
Другими словами нужно чтоб по кнопке выделенная строка перемещалась либо в верх либо в низ в Datagrid-e
 smile  smile  smile  

Автор: Droll 23.5.2006, 19:02
Можно, например, так:
добавляете новое поле (Num, например). В этом поле храните номер по порядку. Для просмотра используйте сортировку по этому полю. При вставке "прочесываете" всю базу с конца к началу (при учете сортировки) и заменяете значения этого поля на "значение + 1", пока не доберетесь до записи с номером вставляемой строки (ей также присваиваете номер +1).
После этого, вставляете свою строку и указываете ей нужный номер.
Далее дело за сортировкой.

Удачи! 

Автор: Демо 23.5.2006, 19:28
Teran

В любой БД ты не сможешь физически добавить запись в середину(за исключением некоторых экзотических).
Сформулируй вопрос точнее. 

Автор: Vit 23.5.2006, 21:16
Просто помнить в что в базе данных нет сортировки по умолчанию. Чтобы она добавлялась в определённое место тогда должна быть указана соортировка, а чтобы ещё и грид отображал как надо, то его обновлять после вставки надо...


PS. Когда уже народ перестанет DBGrid пользоваться, чтобы смочь понять логику баз данных? 

Автор: Foley 23.5.2006, 23:29
Цитата(Vit @  23.5.2006,  21:16 Найти цитируемый пост)
Когда уже народ перестанет DBGrid пользоваться, чтобы смочь понять логику баз данных? 

а что ты предлагаешь? как еще можно лучше отобразить табличные данные? конечно, если ты не имел ввиду использование DB-компонент типа DBEdit и пр. и переходить по записям с помощью кнопок... 

Автор: skyboy 24.5.2006, 00:10
Foley, берёшь DrawGrid... Сам заполняешь, сам управляешь... Делаешь, что хочешь... И тогда - переставляй, сортируй, выделяй... Например, чтоб отсортировать данные по значению вовсе не обязательно добавлять в запрос "ORDER BY" и опять гнать 10 Мб данных по дохлому диал-апу... Можно запихнуть данные в массив, извратиться над ними, а потом - отрисовать в гриде...  

Автор: DimassS 24.5.2006, 06:30
Цитата

PS. Когда уже народ перестанет DBGrid пользоваться, чтобы смочь понять логику баз данных?

Да, хотелось бы не пользоваться, но не могу найти один компонентик, называется FlexGrid, позволяет делать с собой всё что душе угодно, вплоть до объединения ячеек внутри... может слышали, не поможете найти? smile  

Автор: Foley 24.5.2006, 22:43
skyboy, я не это имел ввиду, просто некоторые думают, что работают не стаблицей непосредственно, а с гридом (т.е. фактически считают что грид-драйвер БД) поэтому появляются вопросы не "как вставить запись в табличку", а "как вставить запись в грид" 

Автор: lexsedrex 25.5.2006, 08:52
сделай после нажатия кнопки обновление дб грид, а еще лучше заполняй дб грид через адоквери типа так
adoQuery1.Close;
adoQuery1.SQL.Clear;
adoQuery1.SQL.Text:='select * from tab ';
adoQuery1.open;

тогда у тибе будет проще заполнять дбгрид, и данные будут вставлятся нормально.
еще б советовал делать вставку в базу так
 adoQuery1.Close;
adoQuery1.SQL.Clear;
memo2.Lines.Clear;
memo2.Lines.Add('insert into tab (hvoryj, doctor, grupa_krovi, zrist,'
+' diagnoz, vaga, rik_narodzenna, pryvyvky, istoria, '
+'viddilenna) values ('+QuotedStr(edit1.Text)+','+QuotedStr(edit2.Text)+','
+' '+QuotedStr(edit3.Text)+','+QuotedStr(edit4.Text)+','+QuotedStr(edit5.Text)+','
+' '+QuotedStr(edit6.Text)+','+QuotedStr(edit7.Text)+','
+' '+QuotedStr(memo3.Text)+','+QuotedStr(memo1.Text)+','
+' '+QuotedStr(combobox2.Items.Strings[combobox2.itemindex])+')');

adoQuery1.SQL.Text:=Memo2.Text;
adoQuery1.execsql;
верхний пример конечно грязный, но суть понятна 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)