Search  
Friday, May 25, 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  Client/Server  Ajutor FireBird...
 Ajutor FireBird
 
 9/13/2007 7:13:09 PM
User is offlineLAU
240 posts
www.zof.ro
4th


Ajutor FireBird
 (N/A)

Am creat o baza de date "testremote" in Firebird cu IB Expert si acum as vrea sa ma conectez prin internet la ea . Ce string de conectare trebuie sa folosesc? Ma poate ajuta cineva ?

Am pe server ip 82.79.123.218, user "SYSDBA" si parola "masterkey".
Am atasat si un printscreen-ul cu iregistrarea bazei de date 

Multumesc

register.JPG 
 9/13/2007 7:33:15 PM
User is offlineAdrian Gerlan
581 posts
1st




Re: Ajutor FireBird
 (Romania)
lcConnectionString="DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME= 82.79.123.218:testremote.fdb"
nConnectionHandle = SQLStringConnect(lcConnectionString, .T.)
?nConnectionHandle

Ar trebui sa mearga... ( e drept, acum n-am reusit sa ma conectez cu datele date de tine..., eu insa, folosesc aceasta sintaxa pentru conectare pe FireBird)...


AdiG
 9/13/2007 10:45:27 PM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania)

lcConnectionString="DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME= 82.79.123.218:testremote.fdb"

Nu trebuia la DBNAME pusa toata calea ? Adica "DBNAME= 82.79.123.218:C:\DBFirebird\testremote.fdb" ?

O sa incerc si eu

 

 9/13/2007 11:04:54 PM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania)

Am incercat :

DBNAME= 82.79.123.218:testremote.fdb

DBNAME= 82.79.123.218:C:\testremote.fdb

DBNAME= 82.79.123.218:C:\DBFirebird\testremote.fdb

DBNAME= 82.79.123.218:C\DBFirebird\testremote.fdb

Nu ma pot conecta ! 

Calea bazei de date este "C:\dbfirebird\testremote.fdb" iar tabla se numeste "tabelaremote"

E posibile sa nu fi creat eu baza de date corect? Ma gandesc ca daca am inregistrat-o si am creat si o tabela este ok. Ce parere aveti ?

Multumesc

 9/14/2007 9:42:25 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
Pentru a ascunde calea reala a bazei de date pe server, foloseste alias ( incluzi linia

testremote = C:\DBFirebird\testremote.fdb

in aliases.conf  - din folderul in care e instalat Firebird)

Ulterior poti folosi ...DBNAME=
82.79.123.218:testremote

Verifica daca sunt permise conectarile prin portul 3050 la firewall (implicit va fi blocat, probabil)

O alta propunere, daca vrei conectare directa, este sa folosesti ZeBeDee ca tunel de comprimare/encriptare a traficului
E foarte simplu de folosit ( trebuie deschis portul 11965 la firewall )

Pe server : zebedee -s localhost:3050
Pe client : zebedee 3051:82.79.123.218:3050

Conectare : ...DBNAME:localhost/3051:testremote...

Lucrul prin tunel comprimat cu ZeBeDee e de preferat, creste si viteza ( comprima cam de 5-8 ori ) si siguranta traficului (nu se pot analiza pachetele pentru parole, date, etc )

Incearca si mai vedem...

 9/15/2007 9:44:49 PM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania) Modified By LAU  on 9/15/2007 9:48:37 PM)

Am creat baza de date pe server cu IBExpert si am inregistrat-o cum se vede in atasament (parola "masterkey")

Am dezactivat firewall-ul si de pe server si de pe client, la fel si antivirus-ul

Am adaugat in aliases.comf : testremote = c:\dbfirebird\testremote.fdb

De pe client, din fereastra de comenzi aVFP am rulat :

lcConnectionString="DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=82.79.123.218:testremote"
nConnectionHandle = SQLStringConnect(lcConnectionString, .T.)
?nConnectionHandle = -1

firebird Passed.JPG 
 9/15/2007 9:57:07 PM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania)

Am instalat pe client IBExpert si am incercat sa ma conectez la baza de date testremote.fdb de pe server.

Rezultatul pt DB Conection l-am atasat ca nu stiu cum sa ma exprim

 

DB Connection .JPG 
 9/15/2007 10:02:07 PM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania)

Rezultatul pt TCP/IP este cel atasat, dar era normal sa mearga (zic eu) pentru ca am dezactivat si antivirus-ul si firewall-ul de pe ambele calculatoare.

Mentionez ca si la server si la client am Ip-ri publice.

Multumesc

TCP.JPG 
 9/15/2007 10:08:26 PM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania)

O alta propunere, daca vrei conectare directa, este sa folosesti ZeBeDee ca tunel de comprimare/encriptare a traficului
E foarte simplu de folosit ( trebuie deschis portul 11965 la firewall )

Pe server : zebedee -s localhost:3050
Pe client : zebedee 3051:82.79.123.218:3050

Conectare : ...DBNAME:localhost/3051:testremote...

Lucrul prin tunel comprimat cu ZeBeDee e de preferat, creste si viteza ( comprima cam de 5-8 ori ) si siguranta traficului (nu se pot analiza pachetele pentru parole, date, etc )

Dorin dupa ce ma conectez in varianta clasica(normala), o sa testez si aceasta propunere! Ca idee, acest tunel pe care il creaza ZeBeDee, blocheaza accesul la internet ca si VPN-ul ?

 9/15/2007 10:28:58 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
Din prima eroare deduc ca nu ai setat la instalare "install gds32.dll for legacy applications".
Acel gds32.dll e interfata cu serverul din zilele Interbase (Groton Database System - gds ).
Exista ca optiune la instalare. Tot ce trebuie sa faci e sa selectezi butonul Browse/Open la campul "Client Library File...", si sa alegi fbclient.dll fin folderul bin, de unde e instalat Firebird.
Ulterior, dupa ce reusesti, poti sa aplici o tehnica simpla de adaugare a unui user DNS in registry (asta cainterfata ODBC cu VFP), care te va scuti de necesitatea de a instala driver ODBC pentru accesul din VFP

 

 9/15/2007 10:36:02 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
 

Dorin dupa ce ma conectez in varianta clasica(normala), o sa testez si aceasta propunere! Ca idee, acest tunel pe care il creaza ZeBeDee, blocheaza accesul la internet ca si VPN-ul ?



Acel tunel doar creeaza o conexiune intre zebedee ca si client si zebedee ca si server (ceva asemenator cu ssh)
Detaliat putin exemplul meu :
zebedee client "asculta" conexiuni pe portul 3051 pe localhost, redirecteaza/comprima/encripteaza traficul prin portul 11965 catre ip-ul transmis ca parametru
zebedee servet "asculta" portul 11965, primeste datele, decripteaza/decomprima/redirecteaza traficul pe portul 3050, pe server, portul Firebird.

si invers

De aceea trebuie deschis portul 11965 pe server catre internet si permis portul 3050 pentru Firebird pe server (inbound connections)

 9/16/2007 12:59:51 AM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania) Modified By LAU  on 9/16/2007 1:58:45 AM)

Am reusit Dorine ! Multumesc !

Am luat de pe server acel fisier fbclient.dll din bin si l-am copiat pe calculatorul client. L-am selectat de la "Client Library File " cum mi-ai zis si am reusit sa ma conectez de pe client cu IBExpert !  Mergem mai departe .

 9/16/2007 1:18:49 AM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania) Modified By LAU  on 9/16/2007 1:20:38 AM)

Acum am reusit si din ODBC sa ma conectez, dupa ce am adaugat la Client fbclient.dll !

Acum mai ramane sa ma conectez din VFP

Multumesc !

 

 9/16/2007 1:57:37 AM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania) Modified By LAU  on 9/17/2007 10:48:07 AM)

Am reinstalat Serverul Firebird si am vazut ca era implicit bifat "Generate client library as GDS32.DLL for legacy app. Suport ?" L-am lasat bifat si dupa instalare am testat conexiunea de pe client. Mesajul a fost acelas "Client Library is mising or invalid. gds32.dll". Daca din client selectez eu fbclient.dll (fisier pe care l-am copiat de pe server) se conecteaza.

Oricum, asta ma intereseaza mai putin deocamdata. Pe mine ma preseaza conectarea din VFP! Poate ma ajutati cu un exemplu daca aveti timp !

Serverul este online non-stop

Multumesc

 9/17/2007 11:18:39 AM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania) Modified By LAU  on 9/17/2007 1:16:07 PM)

Revin ca nu mai am rabdare ...cu un test de conectare

Daca pe server execut, din fereastra de comenzi a VFP, urmatoarea comandda

lcConnectionString="DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=82.79.123.218:testremote"
nConnectionHandle = SQLStringConnect(lcConnectionString, .T.)
?nConnectionHandle && = 1

Daca incerc aceeasi comanda, de data asta de pe client, tot din VFP,  rezultatul este   ?nConnectionHandle && = -1

Mentionez, ca de pe client ma pot conecta cu IBExpert dar si din ODBC, dupa cum se vede in atasament, numai din fox nu reusesc :(

In speranta ca nu v-am disperat deja :)

Va multumesc anticipat

Connection succesful.JPG 
 9/17/2007 2:37:34 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
Pot fi mai multe cauze:
-pe client nu e localizabil "fbclient.dll" - ar trebui pus in windows\system32,in folder cu driverul ODBC sau cu aplicatia
-nu e instalat driverul ODBC
-altele

Dupa ce dau un ?SQLStringConnect(...) care returneaza -1, da si un

AError( aEroare )
display memory like aEroare

sa vedem mesajul de eroare ODBC

 9/18/2007 12:09:04 AM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania)

Am copiat pe client, in windows\system32 si in folderul cu aplicatia, fisierul "fbclient.dll".

lcConnectionString="DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=82.79.123.218:testremote"

nConnectionHandle=SQLStringConnect(lcConnectionString, .T.) 

?nConnectionHandle = -1, iar eroarea este cea atasata

 

AError.zip 
 9/18/2007 9:13:38 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
Pare a fi problema de firewall
Trebuie deschis portul 3050 si pe server si pe client
Vezi sa nu fie active 2 ( si cel de le XP )

Eu am incercat cu telnet 82.79.123.218 3050 si a functionat. Deci pe server e ok.
Vezi ce zice telnet-ul la tine pe calculatorul client

 9/18/2007 1:37:30 PM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania)

Am dezactivat de mult firewall-ul de pe ambele calculatoare

Vezi sa nu fie active 2 ( si cel de le XP )

Asta ce mai inseamna ?


La mine pe client Telnet-ul nu zice nimic ! Ramane doar cursorul.

As reinstala si windows-ul si VFP-ul, dar ma enerveaza ca din odbc si din IBExpert ma pot conecta la server, de unde deduc ca windows-ul nu ar avea probleme (poate ma insel). Sa reinstalez VFP 9.0 ? Ce ma sfatuiti ?

 9/18/2007 3:10:19 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
Ar trebui sa functioneze, daca se poate conecta telnet
asa e , sta cursorul

Nu-mi dau seama ce ar putea fi, de la mine merge
Poate ceva setari de retea care incurca comunicarea

 9/18/2007 3:13:12 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
Ce versiune de ODBC ai?
aici e ultima , de  obicei

http://praktik.km.ua/
 9/27/2007 10:21:07 PM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania)

V-as fi anuntat mai devreme dar nu am putut sa accesez site-ul cateva zile! In fine ! Problema este de undeva din fox !

Am reusit sa ma conectez numai daca am creat un executabil ! Tot ce incerc din fereastra de comenzi nu merge, insa nu ma mai intereseaza...sper sa se rezolve dupa ce reinstalez VFP !

Va multumesc mult !

Acum ca am reusit sa fac conexiunea :) ...incepe "distractia" !

Doar doua intrebari daca se poate:

1. Am vazut ca programatorii cu experienta, creaza un camp Primary Key cu Autoincrement - la ce foloseste ?

2. Cum selectez tabela, pentru ca modificarile facute in Grid-ul dintr-un form, sa se reflecte si pe server ? Cursorsetprop?

Va multumesc mult si urati-mi spror la treaba :)

 9/28/2007 2:14:22 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
1. La identificarea unica a liniei in tabela
Serverele SQL nu au Recno()

2.Ar fi indicat sa nu duci toata tabela, doar un subset. Asta se aplica in special la tabelele de inregistrare a tranzactiilor.
Creezi un remote view updatabil sau cursor adapter care are SendUpdates=.T. si modificarile se vor duce pe server

 9/28/2007 7:53:29 PM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania)

 cursor adapter care are SendUpdates=.T. si modificarile se vor duce pe server

Ma puteti ajuta cu un mic exeplu ?

 11/5/2007 10:35:04 PM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Ajutor FireBird
 (Romania) Modified By LAU  on 11/6/2007 1:10:50 AM)

Se poate crea un nou USER(cum este SYSDBA) din fox ?

 11/15/2007 11:48:56 AM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (N/A)
Am urmatoarea situatie :
o baza de date Firebird si o aplicatie scrisa in VFP9 cu care accesez aceasta baza de date .
Am creat un "before delete trigger" in corpul caruia verific daca pot sterge o inregistrare, in caz de conflict ( cand consider ca nu e bine de sters acea inregistrare ) "arunc" o exceptie anterior definita.
Totul functioneaza cand folosesc IBExpert sau isql , problema mea cum fac ca mesajul trimis de baza de date ( de fapt chiar mesajul aratat de exceptie ) sa-mi ajunga inapoi in VFP si sa-l arat pe ecran ( exceptia mea nu e
vizibila ) si oricum rezultatul intors de SQlEXec este -1 .
Sper ca am fost clar .
Multumesc
 11/15/2007 1:51:39 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
Poti sa folosesti Aerror(), mesajul de eroare din exceptia respectiva va fi in array

Problema e ca driverul ODBC mai pune de la el in mesaj si id-ul exceptiei + un antet
Poti sa-ti construiesti textul exceptiilor cu delimiteri, ceva de genul " <<imi pare rau, intrarea respectiva nu se poate sterge deoarece s-au operat iesiri din ea!>> "
Ulterior, poti extrage din array cu StrExtract() exact textul ala, fara ce e pus in plus de driverul ODBC



 11/15/2007 1:58:02 PM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (N/A)
Multumesc !!!
 11/23/2007 7:02:32 PM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (Romania)
Pentru a trimite comenzile catre Firebird in prezent imi construiesc comanda sql si apoi folosesc SqlExec .Mi-am propus sa interactionez cu Firebird doar prin SqlExec.
Problema de care trebuie sa am grija cand construiesc acest sir sa nu caracterul ' in denumirea unui client , produs si altele .
In Visual Studio am posibilitatea de a trimite comanda Sql si un numar de parametri, lucru care rezolva problema caracterului ' .

Am posibilitatea sin VFP9 sa transmit intr-un fel ca parametrii ?
De exemplu : lcsirsql="select * from utilizatori where textboxutilizator.value=cod"
=sqlexec(conexiuneamea,lcsirsql)

Intampin problema daca in textboxutilizator.value operatorul a introdus si caracterul '.
In Visual Studio am posibilitatea : lcsirsql="select * from utilizatori where @p1=cod"
si apoi sa adaug la comandaMeaFirebird : AddParamater(p1,"textboxutilizator.value") .
Acest lucru este realizabil si in VFP9 ?
Multumesc



 11/23/2007 9:56:22 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
lcsirsql="select * from utilizatori where cod = ?textboxutilizator.value "
=sqlexec(conexiuneamea,lcsirsql)

Eu te sfatuiesc sa faci un wrapper pentru comenzile SqlExec(), eventula ca si clasa custom instantiata in form sau ca metoda a acelui form (definita in clasa form parinte)
Asa poti trata mai bine erorile.


 11/24/2007 9:38:52 AM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (Romania)

Personal am creat o procedura care este vizibila in tot programul si este unica la nivel de program care trimite aceste comenzi SqlExec la Firebird .
Care ar fi avantajul daca as crea o metoda de acest gen pentru fiecare Form in loc sa un intr-un singur loc in intre programul(proiectul) unde sa tratez acest lucru?

Toate controale din VFP le-am subclasat , le-am introdus intr-o clasa si folosesc controalele din clasa in locul controalelor standard . Totul e ok, insa nu am reusit (si recunosc
ca nu am sapat foarte mult in aceasta problema) sa folosesc clasa bazata pe "form" . Cand definesc o forma folosind "form designer" nu pot sa-i schimb proprietatea "class = form" in "class= myform_din_clasa_mea" .
Sper ca am fost explicit .


multumesc pt. raspuns , raman dator in continuare :) .
 11/24/2007 10:07:36 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Ajutor FireBird
 (Slovakia)

Eu as merge pe varianta pe care ai folosit-o tu - o singura procedura (in cazul meu este o clasa), care expune o metoda care face trimiterea comenzilor sql. Din form-uri apelez metoda aia, trimitandu-i ca parametru sintaxa sql.

Lucrurile se pot imbunatati aici: nu trimit SINTAXA, ci DENUMIREA instructiunii sql. Concret, intr-o tabela sunt trecute denumirile comenzilor si sintaxele lor. De exemplu "ListaClienti" si "Select * From Clienti". La initializarea aplicatiei, tabela aia e incarcata intr-o colectie (sau array, daca-ti place mai mult), iar metoda care face trimiterea comenzilor sql primeste ca parametru nu codul sql in clar, ci denumirea comenzii. Cauta codul in array si-l trimite pe ala. Chestia asta te ajuta sa modifici sintaxa unei instructiuni, pentru ca o modifici in tabela si cu asta basta - aplicatia habar n-are. Ea trimite denumire comenzii, care nu se modifica.

 

In alta ordine de idei: proprietatea class a unui obiect este readonly in design si in runtime (e documentat in help). Ca sa faci un form bazat pe o clasa form de-a ta, ai doua variante (eu personal o folosesc pe prima):

#1. Create Form MyForm As MyFormClass From MyClassLibrary

#2. Creezi formul ca de obicei, il salvezi, apoi deschizi class browserul, open, selectezi Form la File of type, cauti formul tau pe disc, il deschizi, in arborele din stanga click cu dreapta pe form / redefine / cauti clasa ta pe disc / ok.


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 11/24/2007 11:39:25 AM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (Romania)
Multumesc pentru solutia referitoare la posibilitatea de a-mi redefini formele folosite in proiectul meu avand ca ParentClass un "template form".

Legat de sugestia de a avea o tabela cu denumirile comenzilor si sintaxele lor (uneori e folositor , alteori nu ) iau in consider urmatorul aspect : pentru comenzi gen select este util 100%, dar pentru comenzi Insert, Update cred ca nu convenabil pt. daca am adaugat o coloana noua intr-una din tabele oricum trebuie sa modific aplicatia , eventual sa adaug un nou TextBox pt. introducerea valorii pentru noua coloana,
si daca tot trebuie sa modific aplicatia , modific si instructiunea Sql, in acelasi loc .

Concluzia mea : ar mai lizibil cum ai sugerat tu, dar in unele cazuri (insert,update) cred m-as complica mai mult .
 11/24/2007 3:02:35 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Ajutor FireBird
 (N/A)

 costin_mentor wrote
Multumesc pentru solutia referitoare la posibilitatea de a-mi redefini formele folosite in proiectul meu avand ca ParentClass un "template form".

Legat de sugestia de a avea o tabela cu denumirile comenzilor si sintaxele lor (uneori e folositor , alteori nu ) iau in consider urmatorul aspect : pentru comenzi gen select este util 100%, dar pentru comenzi Insert, Update cred ca nu convenabil pt. daca am adaugat o coloana noua intr-una din tabele oricum trebuie sa modific aplicatia , eventual sa adaug un nou TextBox pt. introducerea valorii pentru noua coloana,
si daca tot trebuie sa modific aplicatia , modific si instructiunea Sql, in acelasi loc .

Concluzia mea : ar mai lizibil cum ai sugerat tu, dar in unele cazuri (insert,update) cred m-as complica mai mult .

N-am inteles, sincer. De ce sa fie util pentru SELECT si inutil pentru INSERT? pai cand adaugi un camp nou in SELECT trebuie sa pui si un texbox in interfata, ca sa arati valoarea campului. Deci... este exact aceeasi situatie. Iar instructiunea SQL (fie ea select, insert sau update) o modifici intr-un singur loc, in tabela aia de care ziceam. Sa nu uitam ca inserarea unei inregistrari intr-o tabela se poate face in mai multe locuri in program, si ca sa nu scrii codul SQL peste tot (si sa fii nevoit sa-l corectezi peste tot), il stochezi in tabela si-l corectezi acolo.


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 11/24/2007 3:33:08 PM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (Romania)

In cazul comenzii Insert , metoda care face trimiterea comenzilor sql primeste ca parametru "denumirea comenzii" si in plus consider ca trebuie sa primeasca si un array cu valorile pentru noua inregistrare .
In cazul comenzii Update , metoda care face trimiterea comenzilor sql primeste ca parametru "denumirea comenzii" si in plus consider ca trebuie sa primeasca si un array cu noile valori doar pentru unele campuri care se modifica . Gresesc ?
 11/25/2007 10:36:13 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Ajutor FireBird
 (Slovakia)
La update nu e chiar asa, pentru ca in cazul in care ai doar "unele" campuri care se modifica - unele colo, unele dincolo, etc, o sa ajungi sa ai mai multe comenzi update (nu ca ar fi rau). Ca sa continuu in stilul tau, o sa zic asa

In cazul comenzii SELECT, metoda care face trimiterea comenzilor primeste ca parametru "denumirea comenzii" si in plus un array cu valorile parametrilor din clauza Where. Daca n-ai Where, atunci ai o problema :) Where n-are voie sa lipseasca de-acolo. Si acu' daca te uiti de sus la astea trei comenzi vei vedea exact aceeasi situatie: denumire de comanda si o lista de variabile care sunt folosite ba ca valori in Insert/Update, ba ca parametri in Where la Select.

Oricum, cum zice americanu' "I rest my case".

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 11/26/2007 3:18:22 PM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (N/A)
In VFP 9 am urmatoarea secvente de cod :
1. p1=ALLTRIM(thisform.pgfstructura.pagtipcamere.cntdettipuri.txtdescriere.Value)
p2=allTRIM(thisform.pgfstructura.pagtipcamere.cntdettipuri.txtacronim.Value)
p3=thisform.pgfstructura.pagtipcamere.cntdettipuri.txtlocuri.Value
lcsirsql="insert into tipcamere (cod, descriere, mnemonica, locuri) values (";
+"gen_id(gen_tipcamere_id,1),?p1,?p2,?p3)"
Mi-am construit comanda sql si apoi o trimit functiei care face legatura cu baza de date Firebird . Asa functioneaza.
2.
lcsirsql="insert into tipcamere (cod, descriere, mnemonica, locuri) values (";
+"gen_id(gen_tipcamere_id,1),?ALLTRIM(thisform.pgfstructura.pagtipcamere.cntdettipuri.txtdescriere.Value)";
+",?allTRIM(thisform.pgfstructura.pagtipcamere.cntdettipuri.txtacronim.Value),";
+" ?thisform.pgfstructura.pagtipcamere.cntdettipuri.txtlocuri.Value)"
Asa nu functioneaza , imi cere sa specific valorile .
Concluzia mea : variabilele prefate cu ? nu trebuie sa fie foarte lungi, au o limita de lungime. Am dreptate ?
 11/26/2007 3:48:56 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
2. VFP nu evalueaza functii, doar variabile/obiecte

La obiecte trebuie ceva de genul ?thisform.object.value
fara "m." ca prefix (valabil doar pentru variabile)

 11/26/2007 4:26:50 PM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (N/A)
Nu merge nici asa (fara functia alltrim ):
lcsirsql="insert into tipcamere (cod, descriere, mnemonica, locuri) values (";
+"gen_id(gen_tipcamere_id,1),?thisform.pgfstructura.pagtipcamere.cntdettipuri.txtdescriere.Value";
+",?thisform.pgfstructura.pagtipcamere.cntdettipuri.txtacronim.Value,";
+" ?thisform.pgfstructura.pagtipcamere.cntdettipuri.txtlocuri.Value"
Nu merge nici
lcsirsql="insert into tipcamere (cod, descriere, mnemonica, locuri) values (";
+"gen_id(gen_tipcamere_id,1),?pdescriere";
+",?pmnemonica,";
+" ?plocuri"
cu variabilele plocuri,pmnemonica,pdescriere initializate anterior.
Merge doar :
lcsirsql="insert into tipcamere (cod, descriere, mnemonica, locuri) values (";
+"gen_id(gen_tipcamere_id,1),?p1,?p2,?p3"
cu p1,p2,p3 initializate anterior .
 11/27/2007 10:29:01 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
Trebuie precizat ca this, thisform nu sunt permise in proceduri, doar in metodele obiectelor
Daca executi o procedura si vrei sa accesezi obiecte din formul curent, il trimiti ca parametru sau accesezi obiectele/proprietatile folosind variabila globala cu numele sau creata de VFP (in cazul unei singure instante active) sau cea specificata de clauza DO FORM ... NAME referintaForm

 11/27/2007 12:13:20 PM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (N/A) Modified By costin_mentor  on 11/27/2007 1:24:03 PM)
ok ,asta explica de ce nu merge prima varianta , dar a 2-a poti sa-mi spui de ce nu merge ?
Diferenta dintre 2 si 3 nu este decat in denumirea variabilelor , cel putin doar asta vad eu.
Eu construiesc sirul Sql si apoi il trimit unei proceduri ca parametru care realizeaza "interactiunea" cu Firebird .
 11/27/2007 12:20:08 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Ajutor FireBird
 (Romania)

 costin_mentor wrote
Nu merge nici asa (fara functia alltrim ):
lcsirsql="insert into tipcamere (cod, descriere, mnemonica, locuri) values (";
+"gen_id(gen_tipcamere_id,1),?thisform.pgfstructura.pagtipcamere.cntdettipuri.txtdescriere.Value";
+",?thisform.pgfstructura.pagtipcamere.cntdettipuri.txtacronim.Value,";
+" ?thisform.pgfstructura.pagtipcamere.cntdettipuri.txtlocuri.Value"
Nu merge nici
lcsirsql="insert into tipcamere (cod, descriere, mnemonica, locuri) values (";
+"gen_id(gen_tipcamere_id,1),?pdescriere";
+",?pmnemonica,";
+" ?plocuri"
cu variabilele plocuri,pmnemonica,pdescriere initializate anterior.
Merge doar :
lcsirsql="insert into tipcamere (cod, descriere, mnemonica, locuri) values (";
+"gen_id(gen_tipcamere_id,1),?p1,?p2,?p3"
cu p1,p2,p3 initializate anterior .

Nu e adevarat - ar trebui sa mearga si cu ?pMnemonica in loc de ?p2. Verifica-ti codul (daca imediat inainte de insert variabilele alea exista si au valori, si da cu AERROR() ca sa vezi ce eroare iti returneaza comanda INSERT. Problema nu e de la lungimile denumirilor de variabile. In plus, sugestia mea este sa nu folosesti ?thisform.txtDenumire.Value in insert, ci o variabila, exact ca in exemplul tau de mai sus, ala cu ?pMnemonica.


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 11/27/2007 12:29:25 PM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (N/A)
Ai dreptate, pur si simplu cateodata ma incurc singur. :)
 11/27/2007 6:52:32 PM
User is offlineedyshor
1450 posts
1st




Re: Ajutor FireBird
 (N/A)
Voi aveti ceva cu 'Scatter Name oRec' si 'Insert from name oRec'

Ok, update nu are 'from name' dar poti sa parsezi proprietatile obiectului cu amembers() si sa construiesti comanda Update on-the-fly, iti ia ceva din procesor dar algoritmul e dinamic si poti sa-l folosesti aproape oriunde fara dureri de cap. Dar sa nu uiti de cheia din where, mai exact id-ul. ori ai o denumire unica pentru fiecare tabela ori il ti minte undeva ca sa-l folosesti la constructia comenzilor .. Grig stie mai bine :)

 11/28/2007 5:21:40 PM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (N/A) Modified By costin_mentor  on 11/28/2007 8:48:45 PM)
Am intampinat urmatoarea problema :

Daca imi construiesc sirul sql si il trimit care parametru , de exemplu:
Variabila data_mea={05/05/2007}
este de tip data , am initializat-o corect .
Anul 2007 este important, nu este 2002 .

sirsql="select * from salariati where data_angaj='"+padl(data_mea,10)+"'" totul merge !

Daca merg pe varianta sirsql="select * from salariati where data_angaj=?data_mea"
si-l trimit catre Firebird. Nu imi functioneaza decat daca formatul datei este in format american : mm/dd/yyyy , daca am formatul datei dd/mm/yyyy imi returneaza eronat , anul din campul data angajarii este invariabil 2002.
Problema credeti ca este de driverul firebird OCBC sau de la VFP9 ?

Lucrul care ma deranjeaza cel mai mult e ca nu am control asupra datelor care le trimit catre Firebird (in cazul comenzilor insert si update) . Eu ma asteptam sa introduc ceva cu data din 2006 sau 2007 si in tabela din Firebird a ajuns anul 2002 .
 11/29/2007 9:27:40 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
 costin_mentor wrote

Lucrul care ma deranjeaza cel mai mult e ca nu am control asupra datelor care le trimit catre Firebird (in cazul comenzilor insert si update) . Eu ma asteptam sa introduc ceva cu data din 2006 sau 2007 si in tabela din Firebird a ajuns anul 2002 .


Asta e chiar interesant, eu nu am patit niciodata asa ceva
Ceva ce functioneaza cu siguranta este formatul 'yyyy-mm-dd' (de tip caracter ), Firebird va face automat conversia in si din tipul DATE
 11/30/2007 2:50:08 PM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (N/A)
Vreau ca orice modificare(insert,update,delete) in anumite tabele sa le "auditez" in ideea ca in orice moment sa pot spune cine , cand ,ce a modificat .
Nu vreau sa las acest lucru in grija bazei de date Firebird din anumite considerente.
Am reusit sa imi construiesc comanda mea sql in genul
"insert into tabela (cod, nume) values (?pcod,?pnume))" . Sa spunem ca pcod=1 ,pnume='costin'
Vreau ca in tabela "audit" a bzaei de date sa introduc aceasta comanda ,intr-o coloana numita comanda, in forma :
"insert into tabela (cod, nume) values (1,'costin')".
Acest al doilea sir eu nu am reusit sa-l obtin decat construind inca un sir pe care mi l-am format in genul :
"insert into tabela (cod,nume) values("+padl(pcod,6)+",'"+pnume+"')"

Exista o alta solutie pentru a obtine ce vreau eu ( sa stiu oricand cine, ce ,cand a modificat) ?

multumesc
 11/30/2007 4:25:29 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
Exista o alta solutie pentru a obtine ce vreau eu ( sa stiu oricand cine, ce ,cand a modificat) ?

Cel mai elegant e cu triggere in baza de date, dar ai zis ca nu vrei asta.
Eu asa am facut, am cod de generare automata a triggerelor de audit pe baza structurii, daca am nevoie.


 4/5/2008 9:41:40 AM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (N/A) Modified By costin_mentor  on 4/5/2008 10:36:45 AM)
Spuneti-mi si mie va rog daca este normal ce mi se intampla ( daca nu, unde gresesc) .Lucrez in vfp9 +firebird

Am o baza de date firebird pe care o accesez in acelasi timp din doua locuri. Am facut un urmatorul experiment :

in mijlocul unei tranzactii ( am setat SQLSETPROP(MYC,"Transactions",2) ) initiate de pe calculatorul 1 am pus un "messagebox" care ma asteapta pe mine sa-i dau un enter pentru a merge mai departe;

in acest timp pe calculatorul 2 incerc sa accesez aceleasi tabele incluse in tranzactia de pe PC-ul 1 si programul intra intr-o faza de asteptare si nu-mi da

acces la acele tabele decat cand dau enter la "messagebox-ul " de pe PC-ul 1
.
Nu mi se pare normal , poate PC-ul 1 sa fie intr-o "stare de inghet" din motive de Windows, asta inseamna sa nu pot accesa baza de date de pe un alt PC ?

Multumesc
 4/5/2008 6:55:53 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
Ai setat in DSN optiunea pentru tranzactii NoWait=N , adica va astepta commit la tranzactia "interesata" de acea tabela din baza de date
Ai doua variante

1. NoWait=Y
2.NoWait=N si configurare LockTimeoutWaitTransactions={cate secunde vrei sa astepte commit}

Am observat ca Firebird 2.1 are nevoie de 2, chiar si  cu LockTimeoutWaitTransactions=0, altfel driverul ODBC da ceva eroare ca ii lipseste parametrul respectiv
O sa-l actualizeze, sper, am trimis acest bug report la developeri





 4/21/2008 2:53:22 PM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (N/A)


Am instalat ultima versiune de Firebird 2.1 si am observat urmatorul lucru :
cand incerc sa ma conectez cu isql la o baza de date de pe calculatorul local se supara daca folosesc urmatorul context :
connect 127.0.0.1:c:\#mmmm\bazamea.fdb user SYSDBA password parolamea;

Daca folosesc :
connect c:\#mmmm\bazamea.fdb user SYSDBA password parolamea;
totul e ok .
A mai patit cineva acest lucru ?
 2/12/2009 11:31:36 AM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (N/A)
mediu lucru : VFP9 , server: Firebird
In Firebird am urmatoarele variante pentru tranzactii (citez):
for the write transactions use this:
concurrency
read_committed
rec_version
write
nowait

for the read transactions use this:
concurrency
read_committed
rec_version
read
nowait

Dat fiind cele de mai sus imi doresc urmatorul lucru : cand rulez anumite comenzi doar de citire (de genul select .... ) vreau ca aplicatia sa foloseasca modul "read transactions" si sa nu astepte incheierea unei alte tranzactii inceputa eventual pe un alt calculator , tranzactie de tipul "write transactions" .
Exemplu : pe PC-ul 1 incep o tranzactie care imi updateaza/insereaza mai multe tabele , pe PC-ul 2 sunt in faza in care tocmai am deschis aplicatia si rulez un raport (care foloseste doar comanda select) . Nu vreau ca aplicatia pe PC-ul 2 sa astepte incheierea tranzactiei de pe PC-ul 1 , vreau sa-mi arate datele exact asa cum sunt in momentul respectiv.

Intrebare : cum jonglez intre aceste tipuri de tranzactii ?

Multumrsc
 2/13/2009 10:15:13 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)

Problema e ca prin ODBC nu ai posibilitatea de control ca si la conexiuni care utilizeaza API
Poti la conectare sa specifici parametri respectivi SQLStringConnect("DSN= ... ;ReadOnly=Y;NoWait=Y")
Cel mai sigur e sa pui Nowait=Y (au corectat driverul ODBC pentru 2.1 , versiunea .148, nu mai da eroare )

tranzactii automate pentru cele la care vrei read 
tranzactii manuale pentru cele la care vrei sa faci update pe mai ,multe tabele.

Functioneaza foarte bine.

 2/14/2009 9:39:11 AM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Ajutor FireBird
 (N/A) Modified By costin_mentor  on 2/14/2009 10:57:19 AM)
Ce am inteles : fac doua conexiuni la baza de date :
con1 = cu READONLY=Y;NOWAIT=Y
con2= cu READONLY=N;NOWAIT=N;LockWaitTimeoutTransactions=nrsec

si pentru selecturi voi folosi tot timpul con1 , iar pentru insert/update/delete voi folosi con2 .

Spun asta pentru ca daca am incercat sa fac un update/insert/delete cu conexiunea con1 am obtinut urmatorul mesaj :
"attempted update during read-only transaction"

.
edit :

nu cred ca este totusi o solutie pentru ca am obtinut urmatorul mesaj ; "lock conflict on no wait transaction deadlock" in urmatorul context :
pe pc1 cu conexiunea con2 am pornit o tranzactie si am oprit-o cu un messagebox .
pe pc2 cu conexiunea con1 am facut un select pe aceasi tabela .

Concluzia mea : READONLY=Y ma lasa sa transmit doar conexiuni bazate pe comanda select ,dar asteapta in continuare terminarea tranzactiei incepute pe un alt calculator .
 2/17/2009 9:51:48 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Ajutor FireBird
 (N/A)
Poti schimba dinamic tranzactiile pe conxiune prin comanda SET TRANSACTION ...
Combinatiile posibile sunat mai jos

Syntax:
      SET|DECLARE TRANSACTION [LOCAL] [NAME transaction [USING
nameUniqueWorkspace]]
[READ WRITE | READ ONLY]
[WAIT | NO WAIT]
[AUTOCOMMIT]
[NO_AUTO_UNDO]
[[ISOLATION LEVEL] {SNAPSHOT [TABLE STABILITY] or REPEATABLE READ
| SERIALIZABLE
| READ COMMITTED [[NO] RECORD_VERSION]}]
[RESERVING ];
= table [, table :]
[FOR [SHARED | PROTECTED] {READ | WRITE}] [, ]
De exemplu ...
SQLExec( handle , [set transaction read only])
SQLExec( handle , [commit])

va schimba tranzactiile pe read only

SQLExec( handle , [set transaction read write snapshot])
SQLExec( handle , [commit])

va schimba tranzactiile pe snapshot ( pentru raportari mai lungi, care au nevoie de starea bazei de date nemodificata de la startul tranzactiei )

Problema e ca trebuie sa dai SQLExec( handle , [commit]) daca deschizi tranzactii in acest fel.
Am testat comenzile SET TRANSACTION cu ultima versiune de ODBC si functioneaza.


  Visual FoxPro  Client/Server  Ajutor FireBird...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement