![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Номер записи [D5, MSSQL]
mate © (2003-02-13 15:43:00)Как сделать поле в котором будут номера записей по порядку. Подскажите плиз.
sniknik (2003-02-13 17:35:00) [1]jocko (13.02.03 17:26)
if not DataSet.IsEmpty then ...
а ты думал что это при пустом датасете возращается? не только, при асинхронном открытии, некоторых курсорах да мало ли еще чего.
sniknik (2003-02-13 17:32:00) [2]читаем хелр
Examine RecordCount to determine the total number of records in the recordset of the dataset component. Applications might use this property with RecNo to iterate through all the records in a dataset, though typically record iteration is handled with calls to First, Last, MoveBy, and Prior using Eof and Bof to set the limits of row traversing.
The dataset component must be active for RecordCount to provide a valid number. Should ADO not be able to determine that actual number of rows, RecordCount will return a value of negative one (-1).
выделено
если ADO не может определить реальное количество строк, RecordCount вернет отрицательное значение еденицы (-1).
если есть варианты с неизвестным количеством строк то о каком порядковом номере может идти речь?
Johnmen (2003-02-13 17:29:00) [3]>jocko (13.02.03 17:10)
Нарвешься при
1. использовании определенных движков
2. при фильтрации
3. ...и не только с RecNo, но и с RecordCount"ом
jocko (2003-02-13 17:26:00) [4]if not DataSet.IsEmpty then ...
sniknik (2003-02-13 17:19:00) [5]просто в один прекрасный день (или наоборот некрасный? :))) можеш получить запись
showmessage( "запись -1 из -1");
но если ты только для этого используеш то ты прав глюка не будет будет непонятка.
jocko (2003-02-13 17:10:00) [6]sniknik ©
>recno не всегда работает, можеш нарватся на глюк.
вот я пишу OnAfterScroll
showmessage( "запись " + inttostr(DataSet.RecNo)+ " из " + inttostr(DataSet.RecordCount));
и все работает
где я нарвусь?
Stas (2003-02-13 16:58:00) [7]А тебе что нужно ? чтобы выводился фактический номер записи в поле ? Зачем ? Как ты их будешь искать ?
mate (2003-02-13 16:48:00) [8]
> В своей таблице на событие AfterInsert вписываешь такой
> код
А на событие AfterDelete мне придётся делать дикремент ...?
stone (2003-02-13 16:39:00) [9]
> if column.Title.Caption="№" then
> form1.DBGrid2.Canvas.TextOut(Rect.Left+1,Rect.Top+1,pchar(inttostr(form1.Query1.recno)));
При работе через ADO (проверено)
можно в датасете создавать дополнительное выисляемое поле и в OnCalcFields писать Query1.FieldByName("RecNo").Value := Query1.RecNo;
Stas (2003-02-13 16:34:00) [10]Может я че-то неверно вписал, но MSSQL есть 100% Autoincrement, Но можно это сделать руками немного надежнее чем ты придумал, а делается это примерно так:
Берется еще один запрос, в свойстве SQL вписывается: Select max (MyField) from Mytable.
В своей таблице на событие AfterInsert вписываешь такой код:
Query1.Open;
Table1.Fields[0].AsInteger:=Query1.Fields[0].Asinteger+1;
Query1.Close;
Zev (2003-02-13 16:30:00) [11]Set nocount on
select Identity( int, 1,1) as Num, -- создаем поле аутоикрем
BlankCode , -- прочии поля не должны быть уник аутоинкр !!!
Name
into #tmp -- во временную таблицу #tmp
from XX_BlankCodeAIR
select * -- итоговый запрос
from #tmp
drop table #tmp -- удаление временной таблицы
sniknik (2003-02-13 16:27:00) [12]recno не всегда работает, можеш нарватся на глюк.
Anatoly Podgoretsky (2003-02-13 16:26:00) [13]С какие пор recno это номер по порядку и при этом что бы был у всех баз.
Теперь поставь фильтр на запрос.
mate (2003-02-13 16:17:00) [14]
> stone © (13.02.03 15:47)
> Поле в базе данных или поле TField в DataSet
И при удалении какой-то записи мне делать пересчет... :(
> Stas © (13.02.03 15:50)
> В MSSQL nип поля Integer свойство identy - Yes
Это будет уникальное поле , а не "попорядку рассчитайсь".
И если я взапросе напишу order by то они и не по возрастанию ещё будут а абы как.
> Johnmen © (13.02.03 15:56)
> Никак... Если ты не извращенец...:)))
А ты тоже не прав , я их в событии DBGrid2DrawColumnCell на канвасе написал и всё нормально. Вот так примерно
if column.Title.Caption="№" then
form1.DBGrid2.Canvas.TextOut(Rect.Left+1,Rect.Top+1,pchar(inttostr(form1.Query1.recno)));
Вот и всё , все большое спа. ;)
Johnmen (2003-02-13 15:56:00) [15]Никак... Если ты не извращенец...:)))
Stas (2003-02-13 15:50:00) [16]В MSSQL nип поля Integer свойство identy - Yes
stone (2003-02-13 15:47:00) [17]Поле в базе данных или поле TField в DataSet