Folderitem

Ciao Antonio

dim f as FolderItem
dim dlg as SelectFolderDialog
dlg = new SelectFolderDialog
dlg.PromptText="Seleccione la carperta de destino"
dlg.ActionButtonCaption= "Seleccione"
dlg.InitialDirectory= SpecialFolder.Desktop 
        f= dlg.ShowModal()

else
return
end if
if f <> nil then
Dim sourceDB As FolderItem
sourceDB = SpecialFolder.Desktop.Child(“OneMarketAmerica_2015_31.sqlite”)
If sourceDB <> Nil And sourceDB.Exists Then
// Create destination folder
Dim appData As FolderItem = SpecialFolder.Desktop
Dim appFolder As FolderItem = SpecialFolder.Desktop.Child(f.Name).Child(“DB_ONEMARKET”)
appFolder.CreateAsFolder
//Copy DB to destination
sourceDB.CopyFileTo(appFolder)
MsgBox"Base de Datos Duplicada!"
end

else
MsgBox"Operacion Cancelada!"
end if

Allora quando seleziono la cartella di destinazione tutto ok , ma se invece faccio click senza selezionare la cartella di destinazione mi da una eccezione NILOBJECT

Dove sbaglio?

Grazie 1000

[quote=184962:@Alan Castellana]dim f as FolderItem
dim dlg as SelectFolderDialog
dlg = new SelectFolderDialog
dlg.PromptText=“Seleccione la carperta de destino”
dlg.ActionButtonCaption= “Seleccione”
dlg.InitialDirectory= SpecialFolder.Desktop
f= dlg.ShowModal()
else
return
end if
if f <> nil then
Dim sourceDB As FolderItem
sourceDB = SpecialFolder.Desktop.Child(“OneMarketAmerica_2015_31.sqlite”)
If sourceDB <> Nil And sourceDB.Exists Then
// Create destination folder
Dim appData As FolderItem = SpecialFolder.Desktop
Dim appFolder As FolderItem = SpecialFolder.Desktop.Child(f.Name).Child(“DB_ONEMARKET”)
appFolder.CreateAsFolder
//Copy DB to destination
sourceDB.CopyFileTo(appFolder)
MsgBox"Base de Datos Duplicada!"
end

else
MsgBox"Operacion Cancelada!"
end if[/quote]

This code I can press cancel, receive the msgbox, and I don’t see any NOE.

dim f as FolderItem
dim dlg as SelectFolderDialog
dlg = new SelectFolderDialog
dlg.PromptText=“Seleccione la carperta de destino”
dlg.ActionButtonCaption= “Seleccione”
dlg.InitialDirectory= SpecialFolder.Desktop
f= dlg.ShowModal()

if f <> nil then
Dim sourceDB As FolderItem
sourceDB = SpecialFolder.Desktop.Child(“OneMarketAmerica_2015_31.sqlite”)
If sourceDB <> Nil And sourceDB.Exists Then
// Create destination folder
Dim appData As FolderItem = SpecialFolder.Desktop
Dim appFolder As FolderItem = SpecialFolder.Desktop.Child(f.Name).Child(“DB_ONEMARKET”)
appFolder.CreateAsFolder
//Copy DB to destination
sourceDB.CopyFileTo(appFolder)
MsgBox"Base de Datos Duplicada!"
end

else
MsgBox"Operacion Cancelada!"
end if

Alan, Mike ha ragione.
Dopo f=dlg.showModal devi verificare se f=nil (ovvero l’utente ha annullato l’operazione)
per cui o fai come dice Mike
if f<>nil then…

oppure semplicemente
if f=nil then return (ovvero esci da questa procedura immediatamente.

Come hai scritto tu, continui e non appena richiedi il nome di f, se questa nil ottieni la NOE

Ciao

Ciao Antonio , Mike

1000 grazie ad entrambi , Antonio professionale come sempre.

Ciaooo

Alan

Ciao Antonio, Ciao Mike

Ho aggiunto la istruzione come suggerito da voi

dim f as FolderItem = SpecialFolder.Desktop
           dim dlg as SelectFolderDialog
dlg = new SelectFolderDialog
dlg.PromptText="Seleccione la carperta de destino"
dlg.ActionButtonCaption= "Seleccione"
                       dlg.InitialDirectory= SpecialFolder.Desktop 
        f= dlg.ShowModal()

if f = nil then
return
end

if f <> nil then
Dim sourceDB As FolderItem //Origine del DB
sourceDB = SpecialFolder.Desktop.Child(“OneMarketAmerica_2015_31.sqlite”)
If sourceDB <> Nil And sourceDB.Exists Then
// Create destination folder
f = SpecialFolder.Desktop.Child(f.Name).Child(“DB_ONEMARKET”)
f.CreateAsFolder
//Copy DB to destination
sourceDB.CopyFileTo(f)
MsgBox"Base de Datos Duplicada!"
end if

else
  MsgBox"Operacion Cancelada!"
end if 

pero il problema persiste quando decido che il folder di destinazione e’ uguale al folder di origine quindi SPECIALFOLDER.DESKTOP.

La istruzioni if= nil mi aiuta a gestire se decido di annullare la operazione la operazione non selezionando nessun folder pero quando decido di selezionare il folder di destinazione uguale al foder di origine mi NEO

Perche mi da errore quando seleziono DESKTOP che e’ un folder a tutti gli effetti?

Grazie

Ciao

Ciao Alan, innanzitutto un suggerimento per l’uso del forum: quando scrivi il codice usa il pulsante Code (quello con <> nell’icona) altrimenti diventa difficile leggerlo senza l’indentazione.

Venendo la tuo problema
ok hai risolto il tuo problema in caso di annullamento.

Il problema che hai dovuta all’istruzione:

f = SpecialFolder.Desktop.Child(f.Name).Child("DB_ONEMARKET")

che onestamente non chiara…
poniamo che tu scelga con la dialog una cartella di nome “pippo” sul desktop, l’istruzione dice la folder item deve essere la cartella DB_ONEMARKET all’interno della cartella “pippo” (che esiste) sul desktop.

Se per l’utente sceglie una cartella “pippo” che si trova dentro la cartella “pluto” o, come nel caso che indichi, la desktop stessa, allora avrai un errore in quanto cerchi, nella catena, una cartella che non esiste (e fin qui non c’ problema se dopo la crei) e qui la cartella DB_ONEMARKET e a questo punto hai il NOE.

Le soluzioni sono 2, a seconda di quello che vuoi realizzare:

  1. la pi probabile, vuoi creare la cartella DB_ONEMARKET dentro la cartella scelta dall’utente, ovunque essa sia:
f=f.child("DB_ONEMARKET")
  1. la cartella che contiene la cartella DB_ONEMARKET deve essere per forza sul desktop, allora piuttosto che chiedere una follare item chiedi un nome (con una normale dialog) e poi se non vuoto punti a questa cartella, la crei se non esiste poi qui passi alla cartella DB_ONEMARKET.
    Rimanendo sempre alla scelta del nome fatto con la select folder sarebbe:
f = SpecialFolder.Desktop.Child(f.Name)
if not f.exists then f.createasfolder
f=f.child("DB_ONEMARKET")

Ma non credo che questo sia quello che volevi fare. Probabilmente hai messo la cartella sul desktop per vedere il risultato.

Ciao

Antonio

Inutile dirti che sei un genio , il problema era nella istruzione come dici tu, cosi che lo cambiata come ha suggerito e funziona esattamente come volevo che funzionasse. Eternamente grato.

(P.S piu avanti se sei disponibile mi piacerebbe prendere lezioni da te a pagamento ovvio ed approfondire in un modo professionale Xojo ovviamente se sei disponibile)

ciao e grazie

per quanto riguarda l’uso del forum hai ragione mi sono accorto adesso, chiedo scusa a tutti

Ciao