Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Как вставить данные в определенном месте |
Автор: Teran 23.5.2006, 15:38 | ||
Использую Ado компоненты Этим кодом добавляю строку в базу
и она появляется в dbGrid-e в низу Как можно вставить строку например между 2 и 3 строками? ![]() ![]() ![]() |
Автор: Teran 23.5.2006, 16:18 |
Другими словами нужно чтоб по кнопке выделенная строка перемещалась либо в верх либо в низ в Datagrid-e![]() ![]() ![]() |
Автор: Droll 23.5.2006, 19:02 |
Можно, например, так: добавляете новое поле (Num, например). В этом поле храните номер по порядку. Для просмотра используйте сортировку по этому полю. При вставке "прочесываете" всю базу с конца к началу (при учете сортировки) и заменяете значения этого поля на "значение + 1", пока не доберетесь до записи с номером вставляемой строки (ей также присваиваете номер +1). После этого, вставляете свою строку и указываете ей нужный номер. Далее дело за сортировкой. Удачи! |
Автор: Демо 23.5.2006, 19:28 |
Teran, В любой БД ты не сможешь физически добавить запись в середину(за исключением некоторых экзотических). Сформулируй вопрос точнее. |
Автор: Vit 23.5.2006, 21:16 |
Просто помнить в что в базе данных нет сортировки по умолчанию. Чтобы она добавлялась в определённое место тогда должна быть указана соортировка, а чтобы ещё и грид отображал как надо, то его обновлять после вставки надо... PS. Когда уже народ перестанет DBGrid пользоваться, чтобы смочь понять логику баз данных? |
Автор: skyboy 24.5.2006, 00:10 |
Foley, берёшь DrawGrid... Сам заполняешь, сам управляешь... Делаешь, что хочешь... И тогда - переставляй, сортируй, выделяй... Например, чтоб отсортировать данные по значению вовсе не обязательно добавлять в запрос "ORDER BY" и опять гнать 10 Мб данных по дохлому диал-апу... Можно запихнуть данные в массив, извратиться над ними, а потом - отрисовать в гриде... |
Автор: DimassS 24.5.2006, 06:30 | ||
Да, хотелось бы не пользоваться, но не могу найти один компонентик, называется FlexGrid, позволяет делать с собой всё что душе угодно, вплоть до объединения ячеек внутри... может слышали, не поможете найти? ![]() |
Автор: 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; верхний пример конечно грязный, но суть понятна |