PDA

Ver la Versión Completa : Listado de Bases de datos


eduardoemh
28-06-2007, 17:53:55
Necesito saber si en delphi existe algún control con lo que pueda hacer lo siguiente: en un campo el usuario pondra el nombre de un servidor sql y quiero que en una lista desplegable me salga todos los catalogos existente en ese servidor.

;)

Lepe
28-06-2007, 18:23:23
La respuesta tal cual: No, no existe control que lo haga.

Pero vamos, programar es sinónimo de inventar ;).

Necesito saber si en delphi existe algún control con lo que pueda hacer lo siguiente: en un campo (1) qué clase de campo, de una base de datos, de un Edit :confused: el usuario pondra el nombre de un servidor sql (2) el ¿nombre de la máquina?¿su IP? y quiero que en una lista desplegable me salga todos los catalogos (3) ¿qué entiendes por catálogo? existente en ese servidor.

Neftali [Germán.Estévez]
28-06-2007, 18:28:58
¿Qué tipo de Servidor SQL?
¿Cómo estás accediendo?

eduardoemh
28-06-2007, 18:48:44
Campo de un edit, y seria el nombre de la maquina; los catalogos serían las bases de datos que hay en ese servidor.

Lepe
29-06-2007, 10:49:32
En tu programa, podrías incluir la opción de "Registrar catálogo", en un servidor (digamos el principal), guardas una tabla con todos los datos que necesites para que otro servidor se conecte a ella.

Si un usuario del servidor B, quiere hacer público un catálogo que tiene en su ordenador, primero tendría que registrar ese catálogo.

Cuando se quiera saber los catálogos disponibles, es una simple consulta a la tabla anterior.

Por supuesto tienes que hacer el paso inverso: " Eliminar Registro de catálogo" y controlar los errores que puedan surgir.

No se me ocurre otra forma, ya que en c/s no habrá carpetas compartidas y por ende, no se puede acceder de forma remota a cualquier carpeta de cualquier servidor. Además, creo que es la opción más simple.

Saludos

Neftali [Germán.Estévez]
29-06-2007, 10:59:45
Si te está conectando con SQL Server, puedes obtener la lista de Bases de Datos conectando a la BD master y ejecutando:


select name from SysDataBases


Para la lista de Servidores


select srvName from SysServers


Para las tablas de una Base de Datos, te conectas a esa Base de Datos y ejecutas (la priemra para tablas de usuario y la segunda para tablas de sistema):

select name from SysObjects where type = 'u'
select name from SysObjects where type = 's'


Y así puedes seguir con lo que necesites....

courtois
30-06-2007, 11:27:03
Yo uso esto en una de mis aplicaciones

procedure DatabasesOnServer(Databases : TStrings);
var rs : _RecordSet;
begin
Databases.Clear;
with TAdoConnection.Create(nil) do
try
ConnectionString := 'Provider=SQLOLEDB.1;Password='+editPass.Text+';'+
'Persist Security Info=True;User ID='+editUser.Text+
';Initial Catalog=master;Data Source='+editServer.Text;
LoginPrompt := False;
try
Open;
rs := ConnectionObject.OpenSchema(adSchemaCatalogs,EmptyParam,EmptyParam);
with rs do
begin
try
Databases.BeginUpdate;
while not Eof do
begin
Databases.Add(VarToStr(Fields['CATALOG_NAME'].Value));
MoveNext;
end;
finally
Databases.EndUpdate;
end;
end;
Close;
except
on e:exception do
MessageDlg(e.Message,mtError, [mbOK],0);
end;
finally
Free;
end;
end;


y lo uso asi

Screen.Cursor := crSQLWait;
Invalidate;
comboCatalogos.Items.Clear;
DatabasesOnServer(comboCatalogos.Items);
Screen.Cursor := crDefault;