![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Этот странный DataSet [D5, D7]
Goida © (2003-11-28 16:49:00)
Почему в DataSet RecNo постоянно равен -1?
ksan (2003-11-28 19:52:00) [1]
А по моему, ADO - это гиблое дело потому, что там ничего не видно. Вот например про IBExpress все известно и все контролируемо. А ADO не "упровляемый".
sniknik (2003-11-28 17:55:00) [2]
я не говорил что он лутше, и только не изза того что все его используют (я с ним начинал давно, никто(! :о), вру конечно) не использовал, и статей каких на королевстве счас валом не было вообще, помню когда первая появилась жалел что не было раньше). это не показатель.
просто знаю что там можно такого добится без особых усилий (это параметры по умолчанию). показатель то, что, тебе это нужно, в этих компонентах это есть. чего еще?
Goida (2003-11-28 17:39:00) [3]
> sniknik
Я с ADO еще не разу не сталкивался. Конечно, он лучше, раз все его используют. Но я хотел бы сначала узнать ЧЕМ он лучше.
Inkotex (2003-11-28 17:28:00) [4]
This example uses a button to copy the value of a field in the previous record into the corresponding field in the current record.
procedure TForm1.CopyDataClick(Sender: TObject);
var
SavePlace: TBookmark;
PrevValue: Variant;
begin
with MyData do
begin
{ get a bookmark so that we can return to the same record }
SavePlace := GetBookmark;
try
{ move to prior record}
FindPrior;
{ get the value }
PrevValue := Fields[0].Value;
{Move back to the bookmark
this may not be the next record anymore
if something else is changing the dataset asynchronously }
GotoBookmark(SavePlace);
{ Set the value }
Fields[0].Value := PrevValue;
{ Free the bookmark }
finally
FreeBookmark(SavePlace);
end;
end;
end;
To ensure that the button is disabled when there is no previous record, the OnDataChange event of the DataSource detects when the user moves to the beginning of file (BOF property becomes true), and disables the button.
procedure TForm1.MyDataDataChange(Sender: TObject; Field: TField);
begin
if MyData.Bof then
CopyData.Enabled := False
else
CopyData.Enabled := True;
end;
sniknik (2003-11-28 17:26:00) [5]Goida © (28.11.03 17:16) [9]
я тебе про ADO уже говорил?
http://www.delphimaster.ru/cgi-bin/download.pl?look=1&id=1069281940&n=1
зайди сюда, скачай тулзу которая в exe-шнике лежит, сделай в ней запрос к своему MsSQL и посмотри как грид себя ведет. устраивает?
Vlad (2003-11-28 17:25:00) [6]
> Goida © (28.11.03 17:13) [7]
Для того чтобы сохранять позицию курсора совсем не нужно запоминать RecNo. Это ошибочный путь.
Правильнее будет или использовать TBookMark или позиционироваться с помощью Locate, но для этого нужно иметь уникальное поле (набор полей)
напр.
var
OldId: integer;
begin
OldId:=DataSet.FieldByName("ID").AsInteger;
..... //Действия над набором данных
DataSet.Locate("ID",OldId,[]);
end;
или так:
var
B: TBookMark
begin
B:=DataSet.GetBookMark;
..... //Действия над набором данных
DataSet.GotoBookMark(B);
DataSet.FreeBookMark(B);
end;
BlackKing (2003-11-28 17:24:00) [7]
sniknik © (28.11.03 17:08) [5]
ja i imel v vidu porjadkovij nomer v datasete, a ne v tablice.
vot potomu i ne pojmu, pochemu jego ne sdelali dlja SQL.
HSolo (2003-11-28 17:22:00) [8]
Разумеется, перенесет, куда ж он денется :)) - если Вы запомните все поля, нужные для однозначного опознания нужной Вам записи
Goida (2003-11-28 17:20:00) [9]
> Inkotex
Как оную поставить?
Inkotex (2003-11-28 17:18:00) [10]
Неуверен что поможет, ты ставь bookmark делай обновление потом возвращайся к закладке.
Goida (2003-11-28 17:17:00) [11]
>HSolo ©
А locate перенесет на нужную запись?
Goida (2003-11-28 17:16:00) [12]
> Vlad
Sybase и MsSQL. Стандартные компоненты доступа.
HSolo (2003-11-28 17:15:00) [13]
Запомнить ключ записи, потом Locate
Goida (2003-11-28 17:13:00) [14]
> sniknik ©
Да, только проверил. Но не потому что ленивый ;) Времени нет.
Тогда делал лабу, теперь работу, а проблема осталась та еще. Ни как не могу разобраться.
А мне нужно сохранять позицию после обновления... :((( Что делать?
Vlad (2003-11-28 17:11:00) [15]
Вопрос пора в FAQ, чесслово.
Какая СУБД хоть и какие компоненты доступа ?
sniknik (2003-11-28 17:08:00) [16]
BlackKing (28.11.03 17:01) [3]
не всегда, когда рекодсет получает все данные RecNo отражает номер записи в полученном рекордсете. (но это не номер записи в таблице! жего обычно хотят)
sniknik (2003-11-28 17:04:00) [17]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1069400708&n=1
гляжу наконецто проверил, может и другим рекомендациям последуеш наконец?
BlackKing (2003-11-28 17:01:00) [18]
Jesli baza na SQL-servere to RecNo vsegda -1. A v Paradox i DBase ukazivajet na tekushuju zapis".
Zhal" dlja SQL ona ne rabotajet :o(
Inkotex (2003-11-28 16:54:00) [19]
RecNo ето параметр номера записи в активном наборе даных,и если ты нечого неменяеш он с начала всегда будет равен 1.
Может тебе надо RecordCount
Anatoly Podgoretsky (2003-11-28 16:51:00) [20]
А почему бы и нет.