PDA

Ver la Versión Completa : conversion Tstrings


FGarcia
14-06-2007, 03:08:30
Aqui de nuevo, Saludos !

estoy tratando de hacer un restore a una bd firebird con el componente MDORestoreService. En la propiedad DatabaseName me pide el nombre de la BD el cual debe ser de tipo TStrings bueno yo le asocio asi:


MDORestoreService.DataBaseName := EditOrigen.Text;


sin embargo al compilar me manda el siguiente mensaje de error:

[Error] fm_main.pas(97): Incompatible types: 'TStrings' and 'TCaption'

supongo que debo hacer un tipo de conversion o cast pero ¡ni idea!

¿alguna sugerencia? se agradece toda la ayuda.

dec
14-06-2007, 03:13:13
Hola,

Es muy raro. La propiedad "DataBaseName" tiene toda la pinta de ser de tipo "string". ¿seguro que es esa propiedad la que te causa problemas? Y, en todo caso, no puedes "promocionar" un "string" a un "TStrings"... si una propiedad es de tipo "TStrings" tendrás que asignarle un valor de este tipo.

FGarcia
14-06-2007, 03:44:02
hola Dec!

Si de hecho antes de revisar el inspector de objetos yo pense eso, que databasename era un string y asi le asigne el texto del edit.

Revisando los .pas de la unidad MDOServices encontre que sí esta declarada como TStrings.

esta es la declaracion del Servicio de Backup


TMDOBackupService = class (TMDOBackupRestoreService)
private
FBackupFile: TStrings;
FBlockingFactor: Integer;
FDatabaseName: string;
// y muchas lineas mas


y esta es la del servicio de restore


TMDORestoreService = class (TMDOBackupRestoreService)
private
FBackupFile: TStrings;
FDatabaseName: TStrings;


Aqui si desconosco si fue un error de dedo o para su funcionamiento debe ser TStrings.

Bueno seguiremos investigando hasta que se me agote la curiosidad sobre esto....tic tac tic tac tic tac.............

egostar
14-06-2007, 03:59:54
Aqui si desconosco si fue un error de dedo o para su funcionamiento debe ser TStrings.

Bueno seguiremos investigando hasta que se me agote la curiosidad sobre esto....tic tac tic tac tic tac.............

Usa esto, espero te sirva


MDORestoreService.DatabaseName.Add(EditOrigen.Text);



Salud OS.

FGarcia
14-06-2007, 04:09:32
Egostar:

Si, si lo acepta ya no marca el error. JAJAJAJA anteriormente habia probado ADDObject(); y me decia las mismas tarugadas, era la hora de la comida y se me olvido volver a intentarlo ¡primero la panza!

Gracias!!!!:D

egostar
14-06-2007, 04:20:52
Ah pues que bien, me alegra que te haya servido, la cuestión es que aún no entiendo porque lo definieron como TString, a no ser que sea para poder restaurar mas de una base de datos a la vez.

Salud OS.

FGarcia
14-06-2007, 05:05:29
Pues bien despues de buscar donde debi empezar (y creo que esto es valido para todos) la ayuda de Delphi (BackupFile property) y la carpeta Demos, pues sí, se permite el restore de varios archivos.

Los MDO descienden de los IBX asi que en la carpeta demos de IBX hay un ejemplo llamado AdminTool.dpr ahi se muestran los servicios de BackUp y Restore y algunas otras cosas que aun no comprendo.

Bueno el caso es que hay que hacer algunas cosas raras para llevar a cabo el restore, aun no termino de entender el ejemplo pero ya empeze. Y pensar que dije al iniciar esto "ah! solo asigno dos string y ya!" menuda sorpresa!!

Saludos!!

dec
14-06-2007, 05:20:37
Hola,

Hum... ¿no debería llamarse esa propiedad "DatabaseNames"? Puesto que se trata de varias bases de datos... y no de una sola. Pero en fin, a ver si voy yo ahora a enmendarle la plana a quien escribe los componentes de que tratamos... ¡el espagueti volador me libre! :)

Lepe
14-06-2007, 11:17:04
TMDOBackupService = class (TMDOBackupRestoreService)
private
FBackupFile: TStrings;
FBlockingFactor: Integer;
FDatabaseName: string;
// y muchas lineas mas



Según eso yo solo veo una base de datos que pueda hacerse el backup, aunque una BD puede estar partida en varios archivos debido a su gran tamaño.

Al restaurar, teneis razón, pero supongo la propiedad se llama así por unificar con sus objetos padre, polimorfismo o incluso por intuición, esa pequeña "s" puede ser un error de compilación bastante común ;).

Saludos

dec
14-06-2007, 13:16:27
Hola,


(...) por intuición, esa pequeña "s" puede ser un error de compilación bastante común.


Y tan común... como el que ha tenido obtenido el compañero. No hay caso. Una propiedad "DataBaseName" refiere "el nombre de una base de datos". Y ya está. No se espera uno que pueda añadir más de un nombre, más de una base de datos, y, si esto es posible y hacedero, entonces nómbrese la propiedad "DataBaseNames", que sí que dejará claro que son nombres y no un solo nombre los que guarda dicha propiedad.

PD. Ya me estoy metiendo en camisas de once varas... :D :D :D

roman
14-06-2007, 17:07:42
Ya me estoy metiendo en camisas de once varas

Son los creadores de esas componentes quienes lo hicieron. Es claramente un error de diseño, una mala decisión.

// Saludos

Lepe
15-06-2007, 14:19:56
Eh que laz ecezz al final no ce pronuncian, aquí uzamoh el ceceo y la ahpiración :D :D

Zaludoh

egostar
15-06-2007, 17:28:31
Hola amigo,

Bienvenido al club, te recomiendo que leas nuestra guia de estilos (http://www.clubdelphi.com/foros/guiaestilo.php).

:eek: , oops pero si es nuestro amigo Lepe, :D :D :D

Salud OS.