PDA

Ver la Versión Completa : ¿Como guardar una tabla desde el componente shell treeview?


krlox31416
01-09-2008, 01:46:07
Que tal programadores...

Es la primera vez que utilizo esta herramienta para escribir dudas...

Anteriormente tuve buenos resultados con una ayuda para convertir de números a letras del amigo de este foro quien comparte el codigo "Contraveneno" y fue de gran ayuda...

Ahora necesito resolver otro problema!!!...

Necesito guardar una Tabla usando el componente shell treeview...

El problema es que no tengo idea como programar o en que evento de ese componente... la idea es que el usuario explore las direcciones y según guarde la tabla en la dirección que selecciono para eso tendria que darle click
a la ubicación seleccionada y despues con un boton validar si dio click con la ubicacion en el shell treeview que me guarde...

ya se como guardar por medio de un boton la tabla pero el problema es que yo dentro del boton por defaul pongo la ubicacion por ej. C:Tabla.db

pero yo quiero que el usuario seleccione la ruta que el quiera y que valide por medio de un boton y guarde, no se si me explique...

de antemano muchas gracias si alguien me pueda ayudar...

Y si necesitan de mi ayuda no duden en mandarme por este medio...

sus inquietudes... o manden un mensaje privado...

Aqui les dejo mis direcciones de correo electronico por si necesitan de algo...

jcrebollosa@hotmail.com, krlox_sabroxas@hotmail.com:)

estoy a sus ordenes

Caro
01-09-2008, 03:49:53
Hola krlox31416, según a lo que te entiendo, tu quieres obtener el path que se selecciona en el ShellTreeView, lo puedes hacer de esta forma.


procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(ShellTreeView1.SelectedFolder.PathName);
end;


sobre el path que tienes, despues sería aumentar el slash, con la función TrailingBackslash o una cadena '\' y concatenar el nombre de tu archivo que ya lo tienes.

Otra forma de seleccionar una carpeta es usando SelectDirectory.


var
Carpeta : String;
begin
if SelectDirectory('Seleccione la ruta de la carpeta', 'c:\', Carpeta) then
begin
showmessage(Carpeta+'\Tabla.DB');
end;


para este ultimo añades en el uses la unidad FileCtrl.

Saluditos

krlox31416
01-09-2008, 15:34:48
Primeramente gracias Caro por tu ayuda...

No pense que tan pronto respondieran al llamado... ya veo que esto si funciona y bien!!!

voy a checar estas lineas de codigo que me regalaste...

yo estoy trabajando con delphi 5 y 6, voy a checar los componentes que se necesitan...

despues te cuento que tal me fue va...

y de nuevo 1000 % gracias... por la ayuda...

si necesitas de mi ayuda mandamelas por este medio...
ya tienes mis correos alternativos!!!...

saludos desde San Juan del Río Queretaro. México :) :)

krlox31416
13-09-2008, 18:04:28
Que tal Caro!!!:(:(
Disculpa que no mande respuesta inmediatamente pero lo que paso fue que ya había respondido antes ya 3 veces y me sacaba de la pagina ya que antes de mandar el mensaje le di en vista previa para ver como quedaba el mensaje y me saco de la pagina por lo que perdí todo lo que te había escrito junto con el código que púese…

Y otro problema es que no se a donde ir para poder ver la respuesta que mandaste o la dirección que se crea al preguntar dudas en este foro no se como ir al hilo sobre mi tema
Por lo que mejor lo abri desde el Hotmail y directamente me abre sobre el tema…

Pero = me traba la maquina ¡!! Estoy desesperado por mandarte este mensaje!!!

Bueno en fin aquí pongo lo anterior zaz!!!

Este es el código que utilizo para copiar una tabla usado para respaldar una tabla


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
// con este código copio mi tabla desde esta ubicación C:\sistema_caja\base de //datos\articulos.db
// y después la guardo por defaul en esta otra ubicación C:\articulos.db

procedure TForm1.Button2Click(Sender: TObject);
begin
if not CopyFile (Pchar ('C:\sistema_caja\base de datos\articulos.db'), Pchar ('C:\articulos.db'),false) then
begin
Application.MessageBox('La base de datos artículos no se puede respaldar'
+#13'debido a que no existe.','Error',MB_ICONERROR);
end
else
begin
Application.MessageBox('La base de datos artículos se ha respaldado ! ! !','Información',MB_ICONINFORMATION);
end;
end;

end.





Y en el código que me pasaste ya cheque para que sirve y que es lo que hace busque en la ayuda de delphi 5 para que sirve el SelectDirectory y vi un ejemplo así que no tuve ningún problema en saber que hacia el SelectDirectory … este funciona como si se tratara del shell treeview…


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
procedure TForm1.Button2Click(Sender: TObject);
var
My_carpeta: String;
begin
if SelectDirectory('Seleccione la ruta de la carpeta', 'C:\sistema_caja\base de datos\articulos.db', My_carpeta) then
begin
showmessage(My_carpeta);
end;
end;





lo que note fue que si concateno dos a más tablas usando el SelectDirectory me aparece como si usara el componente shell treeview eje:


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
procedure TForm1.Button4Click(Sender: TObject);
var
my_carpeta :String;
begin
SelectDirectory('Selecione las bases de datos','C:\sistema_caja\base de datos\articulos.db + proveedores.db + contraseña.db + estado_caja.db', My_carpeta);
end;





de lo contrario si pongo una sola tabla


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
procedure TForm1.Button4Click(Sender: TObject);
var
my_carpeta :String;
begin
SelectDirectory('Selecione las bases de datos','C:\sistema_caja\base de datos\proveedores.db', My_carpeta);
End;





Me aparece solo la tabla según sea el caso

Pero según yo el código que me pasaste no me ayuda para lo que deseo que es copiar una tabla o tablas desde cierta ubicación para después guardar una tabla o tablas
aunque no esta demas saber en que ruta se esta guardando


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
procedure TForm1.Button1Click(Sender: TObject);

begin

showmessage(ShellTreeView1.SelectedFolder.PathName);

end;





pero se supone que con el shell treeview ves visualmente y seleccionas la ruta en la que vas a guardar la tabla o tablas

por otra parte no supe lo de: despues sería aumentar el slash, con la función TrailingBackslash o una cadena '\' y concatenar el nombre de tu archivo que ya lo tienes.no se para que sirve la función TrailingBackslash y eso del slash
:confused:

o no supe como hacer a andar el código será que algo estoy haciendo mal o que me hace falta…

si estoy mal en algo corrígeme!!!:D

Y si hay alguien más que pueda ayudarme de antemano se lo agradeceré…

Si en algo puedo ayudarles estoy a sus ordenes!!!…


Saludos desde San Juan del Río, Querétaro, México...:):)

Caro
16-09-2008, 14:29:30
Hola de nuevo krlox31416, para poder ver el hilo que has abierto, puedes buscarlo de varías formas, al ingresar por la pagina principal del club tienes varias opciones, Editar Perfil, Editar Opciones,Ver mensajes privados, ingresas a cualquiera de ellos, al lado izquierdo buscas Ver suscripciones para que te salga un listado de todos los hilos en los que estas participando, también lo puedes buscar en el subforo que lo has abierto el hilo, incluso con el buscador.

Sobre tu pregunta, lo que te pase es para seleccionar el directorio donde copiaras tu archivo, nose si te estoy entendiendo bien, tu quieres copiar los archivos que tengas en la carpeta C:\sistema_caja\base de datos\ que pueden ser uno o varios, si es así entonces tendras que recorrer la carpeta y copiar los que tengan extención db.


var
Origen, Destino, aPath : String;
sr: TSearchRec;
begin
aPath := 'C:\sistema_caja\base de datos\';
if FindFirst(aPath + '*.db', faAnyFile, sr) = 0 Then
repeat
Origen := aPath+sr.Name;
Destino := my_carpeta+'\'+sr.Name;
CopyFile(PChar(Origen), PChar(Destino), False);
until FindNext(sr) <> 0;
FindClose(sr);
end;


donde en my_carpeta esta el directorio seleccionado por el usuario, mas o menos así sería, sobre el TrailingBackslash es para que te añada el slash o barra '\' al final de tu path.

Saluditos

krlox31416
17-09-2008, 00:31:57
gracias caro deja voy a checar este codigo...
pero era lo de menos copiar una o más tablas...
lo que quiero es el guardar en el destino...
espera mi siguiente respuesta haber que tal ma va...

gracias ....

disculpa mi ignorancia sobre el uso del shell treeview...

te escribo pronto...
:D
saludos!!!!....:)

krlox31416
20-09-2008, 00:08:20
Solucionado my problema!!!
Gracias !!! Gracias!!!… 1000 Gracias!!!... CAAAAAARRRRROOOOOOOOO!!!
Ajuste el código con tus ideas…
Solo le concatene esto que anteriormente me regalaste al nuevo código que me pasaste… Claro que además debes pegar el componente shell treeview a la forma.

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(ShellTreeView1.SelectedFolder.PathName);
end;

Basto concatenar esto:


ShellTreeView1.SelectedFolder.PathName //que es de tipo string


A tu otro código


procedure TForm1.Button1Click(Sender: TObject);
var
Origen, Destino, aPath ,my_mensaje: String;
sr: TSearchRec;
begin
my_mensaje:='En la siguiente ubicación ';
aPath := 'C:\sistema_caja\base de datos\';
if FindFirst(aPath + '*.db', faAnyFile, sr) = 0 Then
repeat
Origen := aPath+sr.Name;
Destino := ShellTreeView1.SelectedFolder.PathName + '\' + sr.Name; //aqui en esta linea le concateno lo anterior
CopyFile(PChar(Origen), PChar(Destino), False);
until FindNext(sr) <> 0;
SysUtils.FindClose(sr);
Application.MessageBox('Las bases de datos se han respaldado!!!','Hasta que me quedo Caro!!!',MB_ICONINFORMATION);
MessageDlg( my_mensaje + ShellTreeView1.SelectedFolder.PathName,mtInformation,[mbOK],0);
end;
end.

Esto si funciona amigos!!!
Insisto Caro en que haces magia!!! Como le haces??? Hee???

Ya que ando emocionado y aprovechando este mismo tema!!!

Que me faltaría para guardar las tablas en una carpeta llamada respaldo o cualquier nombre???

Estoy a tus ordenes!!! Caro!!!
Saludos Caro!!! desde San Juan del Río, Querétaro, México.
:) :)

Caro
22-09-2008, 13:56:19
Hola de nuevo krlox31416, que bueno que te haya servido lo anterior que te puse, ahora sobre tu pregunta, supongo que en base al path que ha escogido en tu ShellTreeView tu quieres crear un directorio si que no existiera, paar ello puedes utilizar la función CreateDir para crear y DirectoryExists para verificar si existe.



PathDestino := ShellTreeView1.SelectedFolder.PathName+'\Respaldo';
if not DirectoryExists(PathDestino) then
CreateDir(PathDestino); //Creamos el directorio ...................
Origen := aPath+sr.Name;
Destino := PathDestino+'\'+ sr.Name; //aqui en esta linea le concateno lo anterior
CopyFile(PChar(Origen), PChar(Destino), False);



Saluditos

krlox31416
27-09-2008, 03:33:18
ya anteriormete había guardado ese código de este mismo foro pero no me acordaba que ya lo había buscado y pegado en un documento en word...

pero de que jala, jala de maravilla...:)

y pues te felicito que sigas así apollando a los que neceitamos una ayudadita...:rolleyes:

y disculpa si tardo en contestar pero como no tengo internet...

pues solo cuando tengo para venir y conectarme en un cibercafe...

me gustaria contribuir en este foro por lo que voy a ver como puedo subir mis pequeños programas ejecutables y con todo y codigo...

te agregue a mi lista de contactos!!!... eres la número 3 jjijiji...
pero como podras ver apenas estoy aprendiento a utilizar este foro...
saludos... y espero proto poder ayudarte...:D

krlox31416
29-09-2008, 02:46:23
unit Unit1;
interface
{El siguiente programa fue creado con la ayuda de Caro
así que aclaro que todo el crédito se lo doy a ella
yo lo único que hice fue investigar para que serbia cada variable,
métodos y jugar con el código, etc, etc..
Este programa lo que hace es respaldar ciertas bases de datos
contenidas en mi directorio C:\sistema_caja\base de datos\
y copiarlas a una ubicación destino por medio del componente
shelltreeview de la pestaña Samples, primero selecionamos la ruta
al darle click sobre este mismo componente y después guardamos
pulsano cualquiera de los botones
Las tablas seran guardas en la dirección seleccionada por el shell
dento de su carpeta creada según el nombre asignado.
}

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ShellCtrls, ExtCtrls, SkinCaption,
WinSkinData, Buttons;
type
TForm1 = class(TForm)
ShellTreeView1: TShellTreeView;
Bevel1: TBevel;
SkinData1: TSkinData;
SkinCaption1: TSkinCaption;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// Crea una carpeta llamada Respaldo y guarda en ella las tablas con extención .db
// con la ayuda de un ciclo repeat

// el mismo =ado con un while mi propuesta
// = y pueden elegir su propio nombre para la carpeta
// sin que sea definido dentro de la sintaxis del código
// eso lo dejo para quien quiera seguir jugando con este código
// basta declarar una variable más y concatenarla
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Caption:='Abrir carpeta';
end;
// Crea una carpeta llamada Respaldo y guarda en ella las tablas con extención .db
// con la ayuda de un ciclo repeat
procedure TForm1.BitBtn1Click(Sender: TObject);
var PathDestino, Origen, aPath, Destino, my_mensaje : string;
sr: TSearchRec;// para definir el tipo de busqueda
begin
my_mensaje:='Y se han guardado en la siguiente ubicación.'+#13;
PathDestino := ShellTreeView1.SelectedFolder.PathName+'\[ Respaldo Caro me ayudo ]'; //creamos el nombre de mi carpeta y concatenamos al directorio
if not DirectoryExists(PathDestino) then // verifica que no exista una carpeta con el nombre Respaldo al directorio destino
begin
aPath := 'C:\sistema_caja\base de datos\';//asignamos el origen de mis tablas
if FindFirst(aPath + '*.db', faAnyFile, sr) = 0 Then //busca el primer archivo .db o cualquiera
repeat
CreateDir(PathDestino); //Creamos el directorio ...................
Origen := aPath+sr.Name;//directorio origen o path
Destino := PathDestino+'\'+ sr.Name; //aqui agregamos las tablas a la carpeta
CopyFile(PChar(Origen), PChar(Destino), False);// copiamos de mi origen al destino
until FindNext(sr) <> 0;// hacer todo el recorrido hasta encontrar mi archivo
SysUtils.FindClose(sr);//cerramos la busqueda del archivo
Application.MessageBox('Las bases de datos se han respaldado ! ! ! ','Información',MB_ICONINFORMATION);
MessageDlg( my_mensaje + ShellTreeView1.SelectedFolder.PathName + '\[ Respaldo Caro me ayudo ]',mtInformation,[mbOK],0);
end
else
begin
Application.MessageBox('Uuuuuy hijo la carpeta ya existe.','Orrorsote',MB_ICONERROR);
Application.MessageBox('Suerte para la proxima! ! !','Suerte',MB_ICONINFORMATION);
end;
end;

// el mismo =ado con un while mi propuesta!!!
// = y pueden elegir su propio nombre para la carpeta
// sin que sea definido dentro de la sintaxis del código
// eso lo dejo para quien quiera seguir jugando con este código
// basta declarar una variable más y concatenarla

procedure TForm1.BitBtn2Click(Sender: TObject);
var PathDestino, Origen, aPath, Destino, my_mensaje : string;
sr: TSearchRec;// para definir el tipo de busqueda
begin
my_mensaje:='Y se han guardado en la siguiente ubicación.'+#13;
PathDestino := ShellTreeView1.SelectedFolder.PathName+'\[ Respaldo Caro me ayudo ]'; //creamos el nombre de mi carpeta y concatenamos al directorio
if not DirectoryExists(PathDestino) then // verifica que no exista una carpeta con el nombre Respaldo al directorio destino
begin
aPath := 'C:\sistema_caja\base de datos\';//asignamos el origen de mis tablas
if FindFirst(aPath + '*.db', faAnyFile, sr) = 0 Then //busca el primer archivo .db o cualquiera
begin
while FindNext(sr) = 0 do //hasta terminar nuestro recorrido
begin
CreateDir(PathDestino); //Creamos el directorio ...................
Origen := aPath+sr.Name;//directorio origen o path
Destino := PathDestino+'\'+ sr.Name; //aqui agregamos las tablas a la carpeta
CopyFile(PChar(Origen), PChar(Destino), False);// copiamos de mi origen al destino
end;
Application.MessageBox('Las bases de datos se han respaldado ! ! ! ','Información',MB_ICONINFORMATION);
MessageDlg( my_mensaje + ShellTreeView1.SelectedFolder.PathName + '\[ Respaldo Caro me ayudo ]',mtInformation,[mbOK],0);
SysUtils.FindClose(sr);//cerramos la busqueda del archivo
end;
end
else
begin
Application.MessageBox('Uuuuuy hijo la carpeta ya existe.','Orrorsote',MB_ICONERROR);
Application.MessageBox('Suerte para la proxima! ! !','Suerte',MB_ICONINFORMATION);
end;
end;
end.

;)