var
NeedNumber: Integer;


NeedNumber := Table.RecNo;
{сохранение номера нужной записи}

{код меняющий номе записи}

Table.RecNo := NeedNumber;
{востановление номера нужной записи}

Попробуйте одну вещь: заблокируйте файл перед попыткой открытия таблицы. Данная манипуляция перед открытием таблицы создаст файл PDOXUSER.LCK. После этого открытие таблиц будет более быстрым, особенно когда их открывают, закрывают и снова открывают. После окончания удалите блокировку файла.

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Преобразование float в строку для SQL-сервера

Преобразование float в строку для SQL-сервера

Зависимости: ???
Автор: Сергей, nfkazak@inbox.ru, Краснодар
Copyright: VIP BANK
Дата: 11 сентября 2002 г.
***************************************************** }

function SQL_Float_String(Value: double): string;
var
OldSeparator: Char;
begin
OldSeparator := DecimalSeparator;
DecimalSeparator := ‘.’;
Result := FloatToStr(Value);
DecimalSeparator := OldSeparator;
end;

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Обратная связь от MSSQL-сервера к клиенту

На форуме постоянно возникает вопрос -
“Как получить обновление данных, по событию, а не таймером”,
чтобы снять его раз и навсегда привожу код dll-ки, которая
является Extended Stored Procedure с единственной функцией -
отправкой UDP-broadcast сообщения.

Зависимости: Windows, SysUtils, IdUDPClient
Автор: Delirium, VideoDVD@hotmail.com, ICQ:118395746, Москва
Copyright: Delirium (Master BRAIN) 2003
Дата: 24 октября 2003 г.
***************************************************** }

library Messager;

uses
Windows,
SysUtils,
IdUDPClient;

function srv_rpcparams(srvproc: Pointer): integer; cdecl; external ‘opends60.dll’
name ’srv_rpcparams’;

function srv_paramdata(srvproc: Pointer; n: integer): integer; cdecl; external
‘opends60.dll’ name ’srv_paramdata’;

function srv_paramlen(srvproc: Pointer; n: integer): integer; cdecl; external
‘opends60.dll’ name ’srv_paramlen’;

procedure SendUDPMessage(Params: Pointer); stdcall; cdecl; export;
var
id: TIdUDPClient;
Msg: string;
Host, Port: string;
begin
try
if srv_rpcparams(Params) < 2 then
exit;
Host := Copy(PChar(srv_paramdata(Params, 1)), 1, srv_paramlen(Params, 1));
Port := Copy(Host, Pos(’:', Host) + 1, Length(Host));
Delete(Host, Pos(’:', Host), Length(Host));
Msg := Copy(PChar(srv_paramdata(Params, 2)), 1, srv_paramlen(Params, 2));
id := TIdUDPClient.Create(nil);
id.BroadcastEnabled := True;
id.Host := Host;
id.Port := StrToInt(Port);
id.ReceiveTimeout := -1;
id.Send(Msg);
id.Free;
except
end;
end;

exports SendUDPMessage;

begin
end.
Пример использования:

Для регистрации на MSSQL скопировать dll в c:\Program Files\Microsoft SQL Server\80\Tools\Binn и исполнить скрипт sp_addextendedproc ‘SendUDPMessage’, ‘Messager.dll’ На клиенте рекомендую использовать компонент TIdUDPServer. Передача сообщений осуществляется так exec SendUDPMessage ‘255.255.255.255:8080′, ‘Привет!’ где 255.255.255.255 - broadcast маска, но можно написать и конкретный адрес (192.168.1.10), 8080 - выбранный для использования порт.

{ **** UBPFD *********** by delphibase.endimus.com ****
>> перевод ODS API mssql2000 на Delphi (написание extended stored procedures)

перевод (как я понял, один из многих) заголовочных файлов
ODS API mssql2000 на object pascal…. для успешной работы необходима opends60.dll…
выполнен с помощью утилиты c2p, её комментарии я оставил…
часть функций, помеченные как устаревшие, не были переведены…
имхо перевод не лишен недостатков, поэтому используйте as is…
добавлю, что у меня всё работает… :)
Зависимости: windows
Автор: wicked, wilk@ua.fm, ICQ:92356239, Тернополь
Copyright: (1) Microsoft (srv.h), (2) Oleg Bulychov, (3) wicked aka Andy Wilk
Дата: 15 ноября 2002 г.
***************************************************** }

{*********************************}
{ Generated by c2pas32 v0.9b }
{ (c) 2001 Oleg Bulychov }
{ Gladiators Software }
{ http://www.astonshell.com/ }
{*********************************}
{(c) 2002 corrections by andy wilk }
Читать полностью…