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


Автор: Makarofff 27.4.2005, 22:30
Надо сделать сортировку в таблице по номеру строки, не используя ключ.Создал поле number (paradox).

По методу пузырька делал, голова болит и ничего не фурычит
Цитата


procedure sort;
const
n = 2;
var
a : array[1..n] of integer;
i,j,k,rab : integer;
begin
Form1.Table1.RecNo:=1;
For i:=1 to Form1.Table1.RecordCount do begin
a[i]:= Form1.Table1.RecNo ;
Form1.Table1.RecNo:= Form1.Table1.RecNo+1 ;
end;
for i:=1 to n-1 do
for j:=1 to n-i do
  if a[j]>a[j+1] then
  begin
    rab := a[j+1];
    a[j+1]:=a[j];
    a[j]:=rab;
  for k:=1 to Form1.Table1.RecordCount do    begin
  Form1.Table1.RecNo:= a[k];
    end;
  end;



Процедуру вызываю в formactivate между Table1.Active :=false; и труе.

Автор: Pakshin A. S. 27.4.2005, 22:33
А использовать SQL? Вроде тама есть параметр order by, который отвечает за сортировку по заданному полю... smile

Автор: Vit 27.4.2005, 23:11
Мдя ... СЛАВА ВЕЛОСИПЕДОСТРОИТЕЛЯМ!

Используй SQL, всё очень просто и ЗНАЧИТЕЛЬНО быстрее чем пузырьками...

Автор: Guest 27.4.2005, 23:31
не мудри, закинь на форму query и пропиши, приблизительно в этом духе
Код

select name,gd from person group by gd

Автор: DimW 28.4.2005, 07:29
Цитата
select name,gd from person group by gd
smile
я не понял мы сортируем или груперуем....?

Код

SELECT NAME1, NAME2
FROM TABLE_NAME
ORDER BY 1






Автор: Makarofff 30.4.2005, 23:33
У меня ошибка лезет "No such table or correlation name"

Автор: Pakshin A. S. 1.5.2005, 21:30
Код

SELECT * FROM DemoTable ORDER BY Field1;

Код

SELECT Field1, Field2 FROM DemoTable ORDER BY Field1;

Это не срабатывает?! Тогда проверь таблички... smile Или предоставь запрос...

Автор: Makarofff 2.5.2005, 12:45
Цитата
with form1.Query1 do begin


          SQL.Add('SELECT N, Name, Publisher, Autor, Comments');
          SQL.Add('FROM "D:\Delphi\Borland\Delphi7\???????\???? ?????? ?????\school.db"');


          SQL.Add('ORDER BY N');


        end;
end;

Автор: Pakshin A. S. 2.5.2005, 20:41
Странно... а все названия точны?

Автор: Makarofff 2.5.2005, 23:18
Цитата(Pakshin @ 2.5.2005, 20:41)
Странно... а все названия точны?

Да,не ругается.

Автор: innok 3.5.2005, 09:31
MakarofffА через SQLExplorer?

Автор: Makarofff 8.5.2005, 21:43
Короче пашет сортировка, но тогда в таблицу не добавляются данные,кнопка navigatorа + не активна

Автор: Makarofff 9.5.2005, 19:15
Вопрос :

Цитата
with form1.Query1 do begin
           Close;       // ??????? ????-????????? ?????????? ??????????? ???????
           SQL.Clear;   // ??????? ????? ??????????? ???????
           // ?????????? ????? ?????? ? ???????? SQL
           SQL.Add('SELECT Name');
           SQL.Add('FROM "' + dirname + '\' + 'school.db' + '"');
           SQL.Add('WHERE (TRIM (Name) ) LIKE "%'+ naz +'%"');
         
           Open;   

Где naz - это критерий поиска.
Почему когда исп. LIKE у меня появляются значения указанного поля , а других нет?

ПОнял, потому что надо SELECT *

Автор: Makarofff 10.5.2005, 22:57
Проблема!!!При добавлении записи

With Form1.Query1 do begin
close;;
Sql.Clear ;
Sql.Add('INSERT INTO School (N,Name,Comments) ');
Sql.add('VALUES ("'+ n + '","'+name12+'","'+name11+'") ') ;
open;
end;

Error creating kursor handle
Как исправить?

Автор: innok 11.5.2005, 07:42
Makarofff
нужно не open, a execsql. Insert into.... не возвращает результирующего набора данных, что и говорится в послании.

Автор: Bodrox 3.6.2005, 12:25
А если у меня есть ADOTable к DBGrid'у (MSAccess), а сортить вы предлагаете через ADOQuery, то как это привить на один DBGrid... Или как вариант, как сделать так, чтобы при добавлении через ADOQuery автоматически происходила сортировка по поле-счётчику? smile

Автор: Bodrox 3.6.2005, 12:38
И ещё, как получить значение поля в DBGrid, на котором фокус находится или на которое только что мышкой щёлкнул?

Автор: innok 4.6.2005, 17:46
Bodrox
1.посмотри свойство Sort. вот из хелпа:
Цитата

Specifies the sort order of the recordset.

Delphi syntax:

property Sort: WideString;



Description

Set Sort to establish or change the list of fields on which the recordset is sorted. Set sort to the name of a single field or to a comma-separated list of fields. Each field may optionally be followed by the keyword ASCENDING or DESCENDING to specify a sort direction for the field. If one of these keywords is not used, the default sort direction for the field is ascending. Set Sort to an empty string to reset the recordset to the sort order originally used when the recordset’s data was first retrieved.

ADOQuery1.Sort := 'LastName ASC, DateDue DESC'
ADOQuery1->Sort = "LastName ASC, DateDue DESC"

Read Sort to determine the field (or fields) on which the recordset is sorted.

2.
Код


DBGrid1.DataSource.DataSet.FieldByName(......)......


Автор: Rubin 6.6.2005, 20:24
Предлагаемым методом
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  with query1 do
  begin
   close;
   sql.Clear;
   sql.Add('Select id,fam,name,adres,tel,email');
   sql.Add('FROM "C:\Program Files\Common Files\Borland Shared\Database Desktop\WorkDir\adrbook.db"');
   sql.Add('order by fam');
   execSQL;
   end;

end;

Сортировка не пашет. После выполнения запроса остается не активный грид smile и один столбик. я уже не знаю что делать

Автор: innok 7.6.2005, 07:21
Цитата
execSQL;


вообще то, если используется select, то нужно Open. Или свойство Active:=True;

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