Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - swan

Pagine: [1]
1
Programmazione (Gambas 2) / input date/mask edit?
« il: 01 Luglio 2009, 10:54:53 »
a quanto vedo non c'è un input per la data (datetime) giusto?
nemmeno per fare quello che in VB6 era un maskedit? in modo da avere un "inputbox" che si presenti __/__/____ pronto per l'inserimento di una data?

ciao
max

2
Programmazione (Gambas 2) / Re: Scomporre una frase
« il: 01 Luglio 2009, 07:56:42 »
Ah! devo tenere più a mente che Gambas, nonostante la somiglianza con VB è veramente orientato agli oggetti, tanto che la split() ha il .count!
Cmq è più completa dell'omologa split in VB6...
Grazie

ciao
max

3
Programmazione (Gambas 2) / classe per controllo parametri query
« il: 01 Luglio 2009, 00:53:45 »
è giusto la prima prova che faccio con il Gambas ed è inerente agli ultimi messaggi sulle query, ho provato a fare una piccola classe chiamata CParm

Codice: [Seleziona]

PRIVATE $Params AS String[]
PRIVATE $Values AS String[]
PRIVATE $Sql AS String

PUBLIC SUB _new(Query AS String)
  ME.Reset()
  $Sql = Query
END

PUBLIC SUB _free()
  $Params.Clear()
  $Params = NULL
  $Values.Clear()
  $Values = NULL
END

PUBLIC SUB Reset()
  $Sql = ""
  $Params = NEW String[]
  $Values = NEW String[]
END

PUBLIC SUB Add(ParamName AS String, Valor AS String)
  IF CheckAdd(ParamName) THEN
    $Params.Add(UCase$(ParamName))
    $Values.Add(Valor)
  ENDIF
END

PRIVATE FUNCTION CheckAdd(ParamName AS String) AS Boolean
DIM P AS String
  IF ParamName THEN    
    FOR EACH P IN $Params
      IF P = UCase$(ParamName) THEN
        Message.Warning("Parametro duplicato!")
        RETURN FALSE
      ENDIF
    NEXT
    RETURN TRUE
  ELSE
    Message.Warning("Il parametro deve avere un nome!")
    RETURN FALSE
  ENDIF
END

PUBLIC FUNCTION Query() AS String
DIM I AS Integer
DIM wSql AS String = $Sql
  IF $Sql THEN
    IF CheckParam() THEN  
        FOR I = 0 TO $Params.Count - 1
          SELECT CASE TypeOf($Values[i])
          CASE 2, 3, 4, 5
            'Numero intero
            wSql = Replace(wSql, "@" & $Params[i], $Values[i], gb.Case)
          CASE 6, 7
            'Numero decimale
            wSql = Replace(wSql, "@" & $Params[i], Replace($Values[i], ",", "."), gb.Case)
          CASE 8
            'Data
            wSql = Replace(wSql, "@" & $Params[i], "'" & $Values[i] & "'", gb.Case)
          CASE 9
            'Stringa
            wSql = Replace(wSql, "@" & $Params[i], "'" & Replace($Values[i], "'", "''") & "'", gb.Case)
          END SELECT          
        NEXT    
        RETURN wSql
    ELSE
      RETURN ""
    ENDIF
  ELSE
    Message.Warning("Non è stata passata la query!")
    RETURN ""
  ENDIF
END

PRIVATE FUNCTION CheckParam() AS Boolean
DIM P AS String
  IF InStr($Sql, "@") <> 0 THEN
    IF $Params.Count > 0 THEN      
      FOR EACH P IN $Params
        IF InStr($Sql, "@" & P, 0, gb.Case) = 0 THEN
          Message.Warning("Il parametro " & P & " non è stato inserito nella query passata!")          
          RETURN FALSE
        ENDIF
      NEXT
      RETURN TRUE
    ELSE
      Message.Warning("Non sono stati specificati i parametri!")
      RETURN FALSE
    ENDIF
  ELSE  
    IF $Params.Count > 0 THEN
      Message.Warning("Impostare nella query passata i parametri!")      
    ELSE
      Message.Info("Non sono stati impostati i parametri.")
    ENDIF
    RETURN FALSE
  ENDIF
END



utilizzata in questo modo:

DIM Parametri AS NEW CParm("UPDATE Articoli SET Desc = @Desc, Prezzo = @Pz, DataModifica = @DataM WHERE Cod = @Cod")
DIM Prezzo AS Float = 12.5
DIM wSql AS String
 
  Parametri.Add("Cod", "Articolo1")
  Parametri.Add("Desc", "DescrizioneArticolo")
  Parametri.Add("Pz", Prezzo)  
  Parametri.Add("DataM", Format(Date(Now), "dd/mm/yyyy"))  
  wSql = Parametri.Query()

su wSql ho la query che 'dovrebbe' non aver problemi.
Visto che sono acerbo di Gambas ho visto negli esempi che con la sub _new e _free di dichiaravano costruttore e distruttore della classe, ma non sono riuscito a fare un'overload del _new.
Come si fanno l'overload?

ciao
max

4
Programmazione (Gambas 2) / Re: Scomporre una frase
« il: 30 Giugno 2009, 19:34:05 »
allora, giulio ha postato questo come risposta a "creare array di componenti"

http://www.gambas-it.org/gmbs/modules/newbb/viewtopic.php?viewmode=thread&topic_id=204&forum=2&post_id=1971

potevo avere meno fretta e postare un'unica risposta... :/

ciao
max

5
Programmazione (Gambas 2) / Re: Scomporre una frase
« il: 30 Giugno 2009, 19:27:41 »
più completo, cosi iteri i vari valori

  DIM AA AS String[]
  DIM Elemento AS String
   
  AA = Split(TextBox1.Text, " ")
  FOR EACH Elemento IN AA

  NEXT

ora l'unica cosa ho letto nel forum che non puoi avere collezione di oggetti quindi non puoi fare textbox(1).text = AA(1) e non mi ricordo come dicevano di fare...

ciao
max

6
Programmazione (Gambas 2) / Re: Scomporre una frase
« il: 30 Giugno 2009, 19:23:42 »
dim AA as string[]
AA = split(textbox1.text," ")

sul vettore AA[] hai tutte le parole, AA[0] la prima ecc.

ciao
max

7
Programmazione (Gambas 2) / query injection
« il: 30 Giugno 2009, 14:41:13 »
ciao a tutti,
scusate se inizio sempre con "in ADO.Net" facevo/faccio ma è per farmi capire meglio. Cmq, in Ado.Net c'era la possibilità di utilizzare i Parameters per difendersi da query injection (qualcuno ne faceva riferimento nei post riguardanti problema di update di una stringa contente l'apostrofo), ho visto che in un'altro post c'era un'esempio di come fare un'exec che era tipo:

conn.exec(,"mioCampo = &valore",)

c'è in questo modo un controllo sul valore che non avrei facendo una query:

wsql = "SELECT * FROM WHERE mioCampo = '" & valore & "'"

non è tanto della possibilità che mi droppano una tabella che mi preoccupo visto il programmino che vorrei fare quanto di come controllare l'eventuale errore.

ciao
max

8
Programmazione (Gambas 2) / Re: SQLite o non SQLite?
« il: 30 Giugno 2009, 00:07:39 »
Premetto, esperienza 0 (ZERO) con gambas e sqlite, ma tutto dipende da cosa si vuole ottenere, esempio ho realizzato un progettino per un catalogo su cd con un "database" in sola lettura in XML. Quindi non solo tutti i campi sono testo ma ci sono anche i markup, ma in questo caso anche se la mole di dati era di svariate migliaia di articoli andava tutto a dovere. Quindi a seconda delle necessità che hai sqlite potrebbe fare al tuo caso

ciao
max

9
Programmazione (Gambas 2) / Re: L'apostrofo in Mysql e Gambas
« il: 30 Giugno 2009, 00:00:44 »
ci sono casi però in cui diventa fondamentale utilizzare istruzioni sql di INSERT INTO per velocizzare le operazioni, esempio nell'importazione di dati si avrebbero sicuramente dei tempi di attesa ben più lunghi utilizzando:

connessione.open
....connessione.create("...")
....
connessione.commit

potrebbe allora essere necessario "formattare" correttamente le stringhe oppure sostituire gli apostrofi al keypress con caratteri simile, c'è un carattere che è simile all'apostrofo ma è di traverso, non lo so fare sotto linux. dov'è la mappa dei caratteri? bho!
altra cosa, quando poi fai le ricerche con le like come si comporta poi gambas con sti campi con l'apostrofo?

ciao
max

10
Programmazione (Gambas 2) / Re: Connection
« il: 29 Giugno 2009, 23:39:04 »
già! proprio dopo aver installato sqlite su un blog ho letto in sintesi quelli che erano i punti di forza e quello a cui ovviamente si doveva rinunciare, esempio la multiutenza (se non gestendola da programma, credo bloccando i record aperti dagli altri...?)
nel frattempo scarico qualche kb in più (rispetto a sqlite) del mysql e ti ringrazio per la delucidazione.

ciao
max

11
Programmazione (Gambas 2) / Connection
« il: 29 Giugno 2009, 23:13:16 »
Passato da programmare con VB6 e Access (ma non del tutto abbandonato) a VB.Net/C# e ADO.Net, con qualche divagazione di WPF ho preso la buona abitudine di aprire e chiudere sempre le connessioni (in modo da evitare anche veri e propri errori a runtime per troppe connessioni con processi lanciati asincroni, con Access non capitava ma passato alle ADO.Net si) (insomma sono il vostro programmatore ideale, tutto M$).
Giovedì passato, dopo l'ennesimo virus, ho deciso che nel pc di casa non c'era più posto per WinXP e mi sono così deciso ad installare Linux (non in dualboot, solo e soltanto linux, che se no non ho speranze di imparare ad usarlo) e ovviamente non ho potuto fare a meno una volta scoperto di installare anche Gambas.
Guardando l'esempio contenuto per mostrare l'interfacciamento ad un database vedo che la connessione viene lasciata aperta per tutta la durata del programma. E' perchè si tratta di un'esempio “scolastico” o non c'è bisogno di chiudere sempre le connessioni un po' come avveniva utilizzando le DAO in VB6?

Ps. molto gratificante approdare su piattaforma Linux e trovarsi difronte ad uno strumento così completo per cominciare a programmare, chi se lo sarebbe aspettato un RAD su Linux :)! In più ritrovando aspetti del VB6 e del VB.Net senza essere MONO.

Ps2. Complimenti anche per il forum sembra che sarà molto più semplice di quanto pensavo provare a fare un primo progettino.

Grazie Max

Pagine: [1]