Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Adaptive Server Anywhere Server Enumeration [D5, Sybase ASA]


AME ©   (2003-07-15 11:36:00) 

В локальной сети несколько серверов с ASA.
Кол-во серверов меняется.
Как програмно найти новые сервера(IP or DNS),как это делает
утилита dblocate?
Нужно для настройки ODBC.


AME   (2003-07-15 14:45:00) [1]


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type a_server_address=record
port_type:Longword;
port_num:Longword;
name:PChar;
address:PChar;
end;
type Pa_server_address=^a_server_address;

type sqlwarn=record
sqlwarn0:Char;
sqlwarn1:Char;
sqlwarn2:Char;
sqlwarn3:Char;
sqlwarn4:Char;
sqlwarn5:Char;
sqlwarn6:Char;
sqlwarn7:Char;
sqlwarn8:Char;
sqlwarn9:Char;
end;

type SQLCA=record
sqlcaid:Array[0..7]of Char;
sqlcabc:Integer;
sqlcode:Integer;
sqlerrml:short;
sqlerrmc:Array[0..69]of Char;
sqlerrp:Array[0..7]of Char;
sqlerrd:Array[0..5]of Integer;
sqlwarn:sqlwarn ;
sqlstate:Array[0..5]of Char;
end;
type PSQLCA=^SQLCA;

type
TForm1 = class(TForm)
{Label1: TLabel;
ListBox1: TListBox;
Button1: TButton;}
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

function db_locate_servers(Val1:PSQLCA;Addr:TFarProc;Val2:TFarProc):Longword ;stdcall;external "dblib7.dll";
function db_init(sqlcastruct:PSQLCA):Byte;stdcall;external "dblib7.dll";
function db_fini(sqlcastruct:PSQLCA):Byte;stdcall;external "dblib7.dll";

var
Form1: TForm1;

implementation



{$R *.DFM}
function EnumServers(P_SQL_CA:PSQLCA;Servr:Pa_server_address;UserFunc:TFarProc):Integer;stdcall;
var sT:String;
begin
sT:=Servr^.name;
Form1.ListBox1.Items.Add(sT+" "+Servr^.address+":"+IntToStr(Servr^.port_num));
if sT<>"" then result:=1
else result:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var SQL_CA:SQLCA;
begin
ListBox1.Items.Clear;
Label1.Caption:="Start";
Application.ProcessMessages;
db_init(@SQL_CA);
db_locate_servers(@SQL_CA,@EnumServers,nil);
db_fini(@SQL_CA);
Label1.Caption:="Done!";
end;

end.

Нет лучше собеседника чем САМ. :))


AME   (2003-07-15 14:35:00) [2]

db_locate_servers нормально работает - если только одна сетевая карта.


AME   (2003-07-15 13:00:00) [3]

Попробовал db_locate_servers
из dblib7.dll - даёт странные результаты:
иногда показыват все сервера , иногда нет.
Как искать без неё?


Наверх

Титульная страница Поиск, карта сайта Написать письмо