Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];

Вниз

Где вы мастера!!!!!!!???????   Найти похожие ветки 

 
DRIVER   (2002-04-04 17:25) [0]

Не могу получить указатель, либо номер текущей записи БД. Как его можно получить имея только DBGrid, Query, SQL, DataSource. Бд отображается через DBGrid.


 
Val   (2002-04-04 17:27) [1]

какой-такой номер записи в SQL? тема ведь избитая уже...


 
Alexander Vasjuk   (2002-04-04 18:04) [2]

Заставь свой сервер считать записи в одном из полей


 
DRIVER   (2002-04-05 13:36) [3]

Для Val.
Не в SQL, а в DBGRid указатель на текущую запись.
Если избитая то я думаю, что помочь не составит труда.


 
DiggerAbstract   (2002-04-05 13:38) [4]

что ты имеешь ввиду под номером текущей записи?


 
Val   (2002-04-05 13:51) [5]

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


 
Johnmen   (2002-04-05 13:57) [6]

>DiggerAbstract, >Val © : Абсолютно правы !
>DRIVER : Сходи и поройся в факах - тема обсосана до костей !
Ответ на свой вопрос обязятельно найдешь, да еще и с примерами !


 
DRIVER   (2002-04-06 06:31) [7]

В DBGrid отображается запрос с данными, взятыми из БД. В нём(DBGrid"e), например,я выделяю запись(строку)под номером 5. Как получить доступ к значениям этой записи? Как получить доступ к произвольному значению выборки?
Спасибо


 
Юрий Жуков   (2002-04-06 10:46) [8]

2DRIVER
Ты все таки прочитай книжки какие нибудь, лучше по дельфям - говорят помогает.

DataSet.FieldValues["Мое поле"]
или так
DBGrid.DataSource.DataSet.FieldByName("Мое поле").asString


 
Desdechado   (2002-04-06 15:43) [9]

Если DBGrid связан только с одной Query, то любое перемещение по гриду вызывает перемещение указателя текущей записи по Query. Так что запись находить и не надо.
А вот если надо найти, откуда она была считана в БД, то для этих целей используются ключи (первичные желательно, но можно и просто по уникальному индексу).
И НИКАКИХ номеров записей.


 
DRIVER   (2002-04-13 08:44) [10]

Спасибо всем, но вы все оказались не правы в моём случае.
Когда долго мучешься что-нибудь получится.
Всё оказалось намного проще.


 
alk   (2002-04-15 13:10) [11]

Посмотри это:
DBGrid1.DataSource.DataSet.RecordNo

Свойство RecordNo - номер текущей записи в DataSet


 
Nemra   (2002-04-15 13:48) [12]

можеш создать обекты TFIELD и обрашатся через них
query1field.value
field-название поле
чтобы создать объекты TFIELD, 2 раза щелкни на компоненту query и на правую кнопку и выбири пункт меню add all fields

Почитай книги по DELPHI:)


 
Севостьянов Игорь   (2002-04-15 15:58) [13]

>alk (15.04.02 13:10) DBGrid1.DataSource.DataSet.RecordNo
для начала DBGrid1.DataSource.DataSet.RecNo
А во-вторых это не для всех СУБД актуально (например для SQL Server - если работать через BDE) -
Загядывал ли ты в исходники ?

Нет ну тогда смотри:

from db.pas
function TDataSet.GetRecNo: Integer;
begin
Result := -1;
end;

procedure TDataSet.SetRecNo(Value: Integer);
begin
end;


если они не переписаны, то ....

from dbtables.pas

function TBDEDataSet.GetRecNo: Integer;
var
BufPtr: PChar;
begin
CheckActive;
if State = dsCalcFields then
BufPtr := CalcBuffer else
BufPtr := ActiveBuffer;
Result := PRecInfo(BufPtr + FRecInfoOfs).RecordNumber;
end;

procedure TBDEDataSet.SetRecNo(Value: Integer);
begin
CheckBrowseMode;
if (FRecNoStatus = rnParadox) and (Value <> RecNo) then
begin
DoBeforeScroll;
if DbiSetToSeqNo(Handle, Value) = DBIERR_NONE then
begin
Resync([rmCenter]);
DoAfterScroll;
end;
end;
end;


from adodb.pas

function TCustomADODataSet.GetRecNo: Longint;
var
BufPtr: PChar;
begin
CheckActive;
if IsEmpty then
Result := -1
else
begin
if State = dsCalcFields then
BufPtr := CalcBuffer else
BufPtr := ActiveBuffer;
Result := PRecInfo(BufPtr).RecordNumber;
{ If record was read with controls disabled, then the RecordNumber is
initialized to -2 as a flag to re-read the value from the recordset }
if Result = -2 then
begin
{ Position to recordset to the appropriate record }
InternalSetToRecord(BufPtr);
CursorPosChanged;
Result := Recordset.AbsolutePosition;
end;
end;
end;

procedure TCustomADODataSet.SetRecNo(Value: Integer);
begin
if RecNo <> Value then
begin
DoBeforeScroll;
Recordset.AbsolutePosition := Value;
Resync([rmCenter]);
DoAfterScroll;
end;
end;


Короче, если использовать для TDataset, то не сработает или я не прав ? Но в каких-то случаях я не получал данной информации работая через BDE на заре своей практики... но прошло время и я не помню как я избавился от проблемы, а как перешел на ADO так вообще забыл об этом

Кстати не совсем согласен с
>Val © (05.04.02 13:51)Вы работаете через квери, следовательно используете SQL-понятия номер записи там нет, поскольку вы делаете выборки.

В Oracle например существует псевдо столбец ROWNUM
----
ROWNUM Возвращает последовательный номер выдаваемой строки из таблицы
или объединения строк. Первая выбранная строка имеет ROWNUM
=1, вторая 2 и т.д. ROWNUM полезен главным образом для
ограничения числа строк, возвращаемых запросом (например -
WHERE ROWNUM < 10). Он может быть также использован для
назначения уникального значения каждой строке таблицы (UPDATE
table SET column =ROWNUM) ROWNUM назначается, когда строка
возвращается и не влияет на порядок, назначаемый фразой ORDER
BY (т.е. он назначает до упорядочения).

----
И еще
----
Тип данных ROWID

Это связанный с каждой строкой псевдостолбец, который соответствует адресу
строки. Этот адрес может быть выбран SQL - оператором используя зарезервиро-
ванное слово ROWID. Как показано в следующем примере, запрос, выбирающий
ROWID, возвращает в шестнадцатеричном виде значение адреса выбираемой строки:

SELECT ROWID, ENAME FROM EMP WHERE DEPTNO = 20

ROWID ENAME
------------------- ----------
0000000F.000.0002 SMITH
0000000F.003.0002 JONES
0000000F.007.0002 SCOTT
0000000F.00A.0002 ADAMS
0000000F.00C.0002 FORD

ROWID возвращает три части информации, необходимой для нахождения строки:
* номер блока в файле базы данных
* номер строки в блоке (первая строка 0)
* номер файла базы данных (первый файл 1)


Для чего используется ROWID ?

ROWID имеют несколько важных применений:
* Это наискорейший метод доступа к определенной строке.
* Они могут использоваться, чтобы посмотреть, как реально хранятся
строки таблицы.
* Они являются уникальным идентификатором для строк в данной таблице

ROWID для строки остается постоянным на протяжении всего времени жизни
строки. Однако Вы не должны трактовать ROWID как основной ключ, так как он
может меняться при удалении и повторном добавлении строки, например - при
использовании утилит Export/Import. Более того, после удаления некоторой
строки ORACLE назначит этот ROWID вновь добавленной строке.

Хотя ROWID и могут использоваться во фразах SELECT или WHERE, они не
запоминаются в базе данных и, следовательно, не являются изменяемыми
данными. Другими словами - невозможно выполнить для ROWID операции UPDATE,
INSERT или DELETE.


 
Anatoly Podgoretsky   (2002-04-15 16:07) [14]

Севостьянов Игорь © (15.04.02 15:58)
Это имеет отношение к Оракл, а не SQL


 
Севостьянов Игорь   (2002-04-15 16:45) [15]

>Anatoly Podgoretsky © (15.04.02 16:07)
Почитай еще раз мой ответ. Я что не так сказал ? Да это для Oracle (можно же ROWNUM в запросе написать (for Oracle)), а вот Val говорит
>Val © (05.04.02 13:51)Вы работаете через квери, следовательно используете SQL-понятия номер записи там нет, поскольку вы делаете выборки.
Это же не совсем правильно - надо исходить об SQL в зависимости от СУБД


 
Севостьянов Игорь   (2002-04-15 16:50) [16]

>Anatoly Podgoretsky © (15.04.02 16:07)
Почитай еще раз мой ответ. Я что не так сказал ? Да это для Oracle (можно же ROWNUM в запросе написать (for Oracle)), а вот Val говорит
>Val © (05.04.02 13:51)Вы работаете через квери, следовательно используете SQL-понятия номер записи там нет, поскольку вы делаете выборки.
Это же не совсем правильно - надо говорить об SQL-понятиях в зависимости от СУБД, а не утверждать в общем случае... Ведь вот в Local SQL и SQL-92 отличаются:

The following SQL-92 language elements are not used in local SQL.

ALLOCATE CURSOR (Command)ALLOCATE DESCRIPTOR (Command)ALTER DOMAIN (Command)CASE (Expression)CHECK (Constraint)CLOSE (Command)COALESCE (Expression)COMMIT (Command)CONNECT (Command)CONVERT (Function)CORRESPONDING BY (Expression)CREATE ASSERTION (Command)CREATE CHARACTER SET (Command)CREATE COLLATION (Command)CREATE DOMAIN (Command)CREATE SCHEMA (Command)CREATE TRANSLATION (Command)CREATE VIEW (Command)CROSS JOIN (Relational operator)CURRENT_DATE (Function)CURRENT_TIME (Function)CURRENT_TIMESTAMP (Function)DEALLOCATE DESCRIPTOR (Command)DEALLOCATE PREPARE (Command)DECLARE CURSOR (Command)DECLARE LOCAL TEMPORARY TABLE (Command)DESCRIBE (Command)DISCONNECT (Command)DROP ASSERTION (Command)DROP CHARACTER SET (Command)DROP COLLATION (Command)DROP DOMAIN (Command)DROP SCHEMA (Command) DROP TRANSLATION (Command)DROP VIEW (Command)EXCEPT (Relational operator)EXECUTE (Command)EXECUTE IMMEDIATE (Command)FETCH (Command)FOREIGN KEY (Constraint)GET DESCRIPTOR (Command)GET DIAGNOSTICS (Command)GRANT (Command)INTERSECT (Relational operator)MATCH (Predicate)NATURAL (Relational operator)NULLIF (Expression)OPEN (Command)OVERLAPS (Predicate)PREPARE (Command)REFERENCES (Constraint)REVOKE (Command)ROLLBACK (Command)Row value constructorsSET CATALOG (Command)SET CONNECTION (Command)SET CONSTRAINTS MODE (Command)SET DESCRIPTOR (Command)SET NAMES (Command)SET SCHEMA (Command)SET SESSION AUTHORIZATION (Command)SET TIME ZONE (Command)SET TRANSACTION (Command)TRANSLATE (Function)UNIQUE (Predicate)USING (Relational operator)


 
Anatoly Podgoretsky   (2002-04-15 16:59) [17]

Севостьянов Игорь © (15.04.02 16:45)
Val говорит абсолютно правильно и Оракл не противоречит SQL он просто включает в каждую таблицу дополнительную колонку, не спорю удобно, но это к SQL как к понятию отношения не имеет.


 
Севостьянов Игорь   (2002-04-15 17:30) [18]

Ладно отнесусь с уважением к твоему возрасту, месту проживания, образованию и увлечениям и спорить не буду [ ничего личного :О)]

С наилучшими пожеланиями, Игорь


 
Севостьянов Игорь   (2002-04-15 18:17) [19]

Предыдущий ответ был для Anatoly Podgoretsky © (15.04.02 16:59)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.005 c
1-26127
Sheva
2002-04-24 10:59
2002.05.09
Invalid Pointer Operation.


1-26141
hooky-mars
2002-04-21 19:01
2002.05.09
Form&MessageBox


3-25985
Пикулев Евгений
2002-04-15 11:08
2002.05.09
Количество записей в DBGride


4-26287
ted
2002-03-06 13:33
2002.05.09
Как получить IP адрес???


1-26056
VCL
2002-04-19 22:30
2002.05.09
Экспорт в Word изображения.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский