Search  
Saturday, February 11, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Clase - VCX si PRG  Creare Variabil...
 Creare Variabila
 
 2/14/2010 7:14:14 PM
User is offlinestefania_b
8 posts


Creare Variabila
 (N/A)
Salut,
Am nevoie de putin ajutor, vreau sa preiau un text introdus de utilizator si sa il transform intr-o variabila in care sa memorez o valoare. Se poate sa creez variabila?
Multumesc pentru ajutor.

PS. folosesc Visual Fox Pro 9.0 SP.2
 2/14/2010 9:56:15 PM
User is offlineoviciandrus
761 posts
www.comptech.ro
1st




Re: Creare Variabila
 (N/A)
Salut Ştefania!

Dă-ne te rog un exemplu ca să te putem ajuta!

Dacă un utilizator introduce textul "Imediat vine primavara!" ce vrei să faci cu acest text? Cum adică să-l transformi pe text în variabilă?
 2/15/2010 9:35:17 AM
User is offlineaflorin
838 posts
1st


Re: Creare Variabila
 (N/A)
Sunt 2 variante sa faci ce iti doresti:
1. varianta veche, folosind functia INPUTBOX
2. declari o variabila si o initializezi in programul principal (variabilamea = "") si apoi o setezi ca sursa de date la un control textbox

Florin Aparaschivei - Iasi
 2/23/2010 7:10:27 AM
User is offlinestefania_b
8 posts


Re: Creare Variabila
 (N/A)
 stefania_b wrote
Salut,
Am nevoie de putin ajutor, vreau sa preiau un text introdus de utilizator si sa il transform intr-o variabila in care sa memorez o valoare. Se poate sa creez variabila?
Multumesc pentru ajutor.

PS. folosesc Visual Fox Pro 9.0 SP.2


Buna,
Nu cred ca m-am facut inteleasa... de fapt nu am explicat cum trebuia, nici eu nu inteleg de ce am intrebat asa ceva
cand ar fi trebuit sa formulez intrebarea altfel, ce sa faci sunt blonda :P, sper sa ma iertati de data asta.
Uitati cum stau lucrurile:
1. Ma conectez la baza de date (SERVER MYSQL)
  *!* Creare Conexiune server date
  PROCEDURE createConnect
  PARAMETERS lcServer, lcPort, lcUser, lcParola, lcbaza
  DIMENSION gError(1,1)
  lcConnection = [DRIVER={MySQL ODBC 5.1 Driver}; SERVER=&lcServer; PORT=&lcPort; UID=&lcUser; PWD=&lcParola; DATABASE=&lcBaza; option=131609]
  liHandle = SQLSTRINGCONNECT(lcConnection)
  IF liHandle  > 0
    ...Codul meu
  ELSE
    AERROR(gError)
    MESSAGEBOX('SQLExec Error'+chr(13)+'Error: '+TRANSFORM(gError[1,1])+chr(13)+gError(1,2), 16, 'SQL Connect Error')
  ENDIF
ENDPROC

*!* END CREATE
OK, totul este bine pana aici, se creaza conexiune.
2. Din pacate toate datele de care are nevoie utilizatorul se afla pe doua servere .. deci la un moment dat,
trebuie sa mai creez o conexiune la un alt server, bine inteles apeland aceeasi procedura de mai sus, din nou este
ok, acum sunt conectat la serverul 2, dar acum apare problema, daca incerc sa fac o interogare in serverul 1,
este firesc sa primesc eroare deoarce eu cer informatii din server 1 iar conexiunea mea este creata la server 2.
Cum pot sa inlocuiesc liHandle cu un nume unic? Daca pot sa fac asta am rezolvat problema deoarce in fiecare form
memorez intr-o propietate numele conexiuni.
Sper sa ma fi facut inteleasa de data asta

O zi buna tuturor.
 2/23/2010 9:06:00 AM
User is offlinecostin_mentor
484 posts
www.accessoft.ro
2nd




Re: Creare Variabila
 (N/A)
poti sa faci asa , la inceput in program sa ai urmatoarele comenzi :

_screen.AddProperty('Conexiune1',0)
_screen.AddProperty('Conexiune2',0)

si dupa conectarea la primul server sa pui
_screen.conexiune1=lihandle

si dupa conectarea la serverul 2 sa pui

_screen.conexiune2=lihandle

iar in program sa folosesti in mod corespunzator

_screen.conexiune1 sau _screen.conexiune2
 2/23/2010 12:49:02 PM
User is offlineaflorin
838 posts
1st


Re: Creare Variabila
 (N/A)
sau poti incerca o abordare OOP:
creezi o clasa care:
- creaza conexiunea
- stocheaza handleul intr-o proprietate a clasei
- are o metoda de SelectData() ce primeste un string si executa select-ul pe handle-ul stocat
- are un constructor ce primeste un parametru functie de care face conexiunea catre server1 sau server2

si apoi undeva in program faci:
PUBLIC objServer1, objServer2
objServer1 = NewObject("Server1") // sau ce parametru o mai fi
objServer2 = NewObject("Server2")

si apoi:
objServer1.SelectData("Select * From MyTable")
etc...

Florin Aparaschivei - Iasi
 2/24/2010 5:46:58 AM
User is offlinestefania_b
8 posts


Re: Creare Variabila
 (N/A)
Buna,
aflorin, te rog mult de tot poti sa imi dai un exemplu mai elocvent? Sti, eu nu am o experienta foarte bogata in FoxPro si nu prea ma descurc cu crearea claselor si apelarea lor.
Multumesc pentru intelegere si pentru efortul vostru de a ma ajuta.

O zi buna!
 2/24/2010 8:15:34 AM
User is offlinestefania_b
8 posts


Re: Creare Variabila
 (N/A)
Buna,
aflorin, te rog mult de tot poti sa imi dai un exemplu mai elocvent? Sti, eu nu am o experienta foarte bogata in FoxPro si nu prea ma descurc cu crearea claselor si apelarea lor.
Multumesc pentru intelegere si pentru efortul vostru de a ma ajuta.

O zi buna!
 2/24/2010 9:35:11 AM
User is offlineoviciandrus
761 posts
www.comptech.ro
1st




Re: Creare Variabila
 (N/A)
Salut Ştefania,

până înveţi despre clase am următoarea propunere

schimbi procedura in functie astfel

FUNCTION createConnect(lcServer, lcPort, lcUser, lcParola, lcbaza)
DIMENSION gError(1,1)
lcConnection = [DRIVER={MySQL ODBC 5.1 Driver}; SERVER=&lcServer; PORT=&lcPort; UID=&lcUser; PWD=&lcParola; DATABASE=&lcBaza; option=131609]
liHandle = SQLSTRINGCONNECT(lcConnection)
IF liHandle > 0
&& aici nu mai pui niciun cod
ELSE
AERROR(gError)
MESSAGEBOX('SQLExec Error'+chr(13)+'Error: '+TRANSFORM(gError[1,1])+chr(13)+gError(1,2), 16, 'SQL Connect Error')
ENDIF

RETURN liHandle
ENDPROC

cand ai nevoie de server 1, foloseşti

conexiune1 = createConnect(lcServer1, lcPort1, lcUser1, lcParola1, lcbaza1)
IF conexiune1 > 0
  * cod referitor la serverul 1 cu SQLExec(conexiune1, ...)
ENDIF

iar cand ai nevoie de celalalt server, foloseşti
conexiune2 = createConnect(lcServer2, lcPort2, lcUser2, lcParola2, lcbaza2)
IF conexiune2 > 0
  * cod referitor la serverul 2 cu SQLExec(conexiune2, ...)
ENDIF
 2/25/2010 9:15:51 AM
User is offlineaflorin
838 posts
1st


Re: Creare Variabila
 (N/A)
Nu am un VFP la indemina, dar am sa incerc sa inlocuiesc cu pseudocod ce nu imi amintesc exact la sintaxa

CREATE CLASS clsConnection AS Custom (sau Session)
protected nHandle = 0

procedure CreateConnection()
// dummy method does nothing
return .f.
endproc

procedure ExecuteSQL(tcSelect, tcCursorName)
// primeste doi parametri string: select-ul de executat si numele cursorului pe care il va crea
nRes = SQLEXEC(this.nHandle, tcSelect, tcCursorName)
// aici urmeaza sa verifici rezultatul nRes si sa te asiguri ca acel select s-a executat corect
// returneaza true in caz de succes
return .t./.f.
endproc

procedure CloseConnection
SQLDISCONNECT(this.nHandle) // sper ca asta e sintaxa
endproc

procedure Destroy()
// cred ca asta e destructorul
this.CloseConnection()
endproc

endclass // sau care o fi sintaxa exacta

Apoi creeezi doua subclase, una pentru fiecare server
si faci override la metoda de CreateConnection

CREATE CLASS clsConnectionServer1 AS clsConnection

procedure CreateConnection
this.nHandle = SQLCONNECT(string de conectare)
// verifici daca s-a facut conectare
return .t./.f.
endproc

endclass

la fel si pentru clsConnectionServer2

Mai departe:
in programul principal faci:
objServer1 = NewObject("clsConnectionServer1")
if objServer1.CreateConnection() = .f.
// something is wrong
endif
objServer2 = NewObject("clsConnectionServer2")
if objServer2.CreateConnection() = .f.
// something is wrong
endif

apoi, de fiecare data cind vrei sa faci un select:
if objServer1.ExecuteSQL("SELECT * FROM myTable", "cMyTable")
// e ok, folosesc cMyTable ca orice tabela VFP
else
// aici tratez eroarea
endif

Avantajele acestei abordari:
- codul de conectare e intr-un singur loc
- codul de tratat erori de conectare ori erori de executie SQL e intr-un singur loc
- modelul e flexibil: poti adauga metode de MakeInsert(), MakeUpdate() si MakeDelete() pentru CRUD, BeginTrans() si EndTrans() pentru transaction management
- daca se schimba stringul de conectare, totul e acolo, in clasa

Observatie:
- am impresia ca in VFP private si protected sunt pe dos. Vezi exact ce trebuie pentru atributul nHandle


Florin Aparaschivei - Iasi
  Visual FoxPro  Clase - VCX si PRG  Creare Variabil...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement