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  Baze de date, tabele, view-uri si indecsi  SI SAU logic...
 SI SAU logic
 
 12/23/2010 8:19:52 AM
User is offlineji_ci
191 posts
5th


SI SAU logic
 (Romania)
Folosesc Vfp6. Am o tabela (cod_elpoz, cod_elnume, cod_act) in care am insiruite elemente cu pozitiile lor  care imi permit actionarea (deschiderea au inchiderea) unui alt element. Problema e ca in insiruirea din tabela nu am numai SI logic ... am si SAU. Ex. Daca I1=.T. (adica deschis) SI I2=.T. SI (S1=.T. SAU S2=.T. ) SI F1=.F. atunci mi se permite deschiderea lui I6. Cum sa parcurg tabela respectiva ca sa imi iasa insiruirea logica? Specific ca elementele difera si am diferite actionari a diferitelor elemente.
 12/23/2010 9:08:53 AM
User is offlinevaly.m
227 posts
4th


Re: SI SAU logic
 (N/A)
Nu prea am inteles mare lucru din enuntul problemei tale... Poate explici mai bine, ce inseamna deschis, inchis, ce e ala "element"...

Valy Maties - Beginner programmer
 12/23/2010 9:27:43 AM
User is offlineji_ci
191 posts
5th


Re: SI SAU logic
 (Romania)
Elementele pot fi de ex niste interupatoare, adica niste elemente de actionare care pot avea pozitia deschis(cod_elpoz=.F.) sau inchis(cod_elpoz=.T.)
 12/23/2010 9:44:43 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: SI SAU logic
 (N/A) Modified By Daniel Buduru  on 12/23/2010 10:47:20 AM)
In tabela ti-ar mai trebui o coloana (caracter sau memo, daca expresiile sunt mai lungi de 254 caractere) cu conditia logica:
I1 AND I2 AND (S1 OR S2) AND (NOT F1)

Apoi ai nevoie sa treci toate elementele pe o singura linie. Operatia se numeste crosstabulare si consta in crearea unei tabele care are ca nume de coloane continutul unui camp din tabela sursa, iar in coloanele respective se trece continutul altui camp tabela.
In cazul tau, coloanele ar fi denumite dupa continutul campului cod_elpoz sau al campului cod_elnume, iar in coloanele respective se trece continutul campului cod_act (daca in cod_act ai valoarea folosita in expresia logica).
Prin cross-tabulare esti limitat la 254 de elemente - cate campuri poti crea intr-o tabela dbf. Poti reduce numarul de campuri necesare daca lucrezi doar cu elementele unui singur circuit odata.

Poti folosi si un vector (sau cate un vector pentru fiecare tip sau circuit ...), dar trebuie sa te gandesti la un alt sistem de identificare a elementelor, bazat pe index, intrucat expresia ar fi ceva de forma asta:
A(1) AND A(2) AND (B(1) OR B(2)) AND (NOT C(3))
Un vector este limitat la 65000 de elemente.

Mai poti folosi un obiect, caruia sa-i adaugi proprietati prin scanarea tabelei:
o=newobject('custom')
select tabela
scan all
o.AddProperty(cod_elpoz, cod_act)
endscan
Expresia logica ar fi:
o.I1 And o.I2 and (o.s1 or o.s2) and (not o.f1)
sau:
with o
.I1 And .I2 and (.s1 or .s2) and (not .f1)
endwith


Daniel Buduru
 12/23/2010 11:00:39 AM
User is offlineji_ci
191 posts
5th


Re: SI SAU logic
 (Romania)
Da ... solutia ar merge perfect daca as avea o sg conditie logica. Deci in tabela mea cod_elpoz si cod_elnume sunt elementele care intervin in ecuatia logica si pozitia lor, iar cod_act reprezinta tipul actionarii (deschidere , inchidere) a elementului asupra caruia trebuie aplicata conditia logica. Cod_act este dintr-o alta tabela (actionari) in care am cod_act, cod_elnume si cod_elpoz. Deci ptr fiecare element din tabela actionari am o alta conditie logica si alte elemente care intervin in ecuatia logica! Sa zicem ca pun un camp exp_logica in tabela actionari .... dar nu stiu cum sa ma folosesc de el!?
 12/23/2010 11:24:35 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: SI SAU logic
 (N/A)
Mie nu mi-e clar cum ai structurat baza de date si ce anume tii in ea.
Tii schema de automatizare, sau simulezi situatia de functionare? Ce vrei sa faci cu conditia logica? Cand anume vrei sa evaluezi?
O expresie de forma celor pe care le-am indicat, pusa intr-o variabila caracter - ce poate fi stocata in camp caracter / memo - poate fi evaluata cu &


Daniel Buduru
 12/23/2010 12:03:07 PM
User is offlineji_ci
191 posts
5th


Re: SI SAU logic
 (Romania)
Ca de obicei nu stiu sa explic! In program trebuie sa dau deschidere la un element de ex. ii dau cod_elnume(care reprezinta elementul) si cod_elpoz(care reprezinta pozitia in care vreau sa aduc elementul). In ex dat cod_elnume sa zicem 2 si cod_elpoz=.F.(adica deschis). Din tabela actionari unde am actionarile posibile (den_act, cod_act, cod_elnume, cod_elpoz) selectez elementul cu codul 2 si cod_elpoz=.F. deci cu alte cuvinte selectez operatia de deschidere a elementului 2 si aflu cod_act sa zicem ca-i 1. In cealalta tabela (blocaje_element) am elementele cu pozitia lor care imi permit actionarea pe care vreau sa o fac eu. Deci ptr cod_act =1 ii corespund elementele care intra in ecuatia logica care imi permite actionarea pe care vreau sa o fac eu. Daca ecautia logica mi-e respectata ... atunci imi permite actionarea elementului (cod_blocaj=.F. din tabela blocaje elemente) iar daca nu cod_blocaj=.T. si dau un mesaj "Interzisa actionarea!" 
 12/23/2010 12:49:45 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: SI SAU logic
 (N/A) Modified By Daniel Buduru  on 12/23/2010 1:54:49 PM)
Te-ai grabit cu structurarea bazei de date, si acum suporti consecintele ...
Deci, faci o simulare de functionare - cred ca pentru asta ai facut si formul cu imagini.
Nu ma mai leg de tabelel si campurile pe care le-ai definit, dupa parerea mea ar trebui sa reiei structurarea.
Pentru simulare,  trebuie sa poti vedea simultan starea tuturor elementelor.
Deci, fie faci o tabela cu o singura linie si cate o coloana pentru fiecare element, ceva de forma asta:

I1   I2   I3  S1 S2 S3 F1 F2 F3
.F. .T.  .T. .F. .T. .F. .T. .F. .T.

Tabela asta se construieste pronind de la tabela cu elemente. Se poate scrie un cod care sa faca asta.
Pe singura linie din tabela pui starea fiecarui element (1 sau 0, sau True si False, ce preferi, oricum faci un camp logic)
Apoi, in tabela cu elemente ai acel camp cu functia :
"I1 AND I2 AND (S1 OR S2) AND (NOT F1)"
copiezi continutul intr-o variabila:
varlogic=camp_functie
apoi selectezi tabela su stari si evaluezi functia:
? &varlogic
&varlogic se va expanda si comanda executata va fi asta:
? I1 AND I2 AND (S1 OR S2) AND (NOT F1)
cu valorile din tabela:
?  .F. AND .T. AND (.F. OR .T.) AND (NOT .T.)

Poti folosi si functia EVALUATE() - cred ca exista in vfp6.
? EVAL(tabela_elemente.camp_functie)
sau
? EVAL(varlogic)



Daniel Buduru
 12/23/2010 8:15:53 PM
User is offlineji_ci
191 posts
5th


Re: SI SAU logic
 (Romania)
Da mergea cu tot ce mi-ai zis inainte ... dar nu mi-a iesit mie testarea cu &varlogica! Cred ca o sa incerc sa fac un vector! E clar cu nu mi-a iesit structura bazei de date! Lipsa experienta si nu numai! Dar tot nu stiu cum as fi putut face! Deci am o tabela elemente in care am datele despre element (echipamentul de care apartine, denumirea elementului, tipul elementului, pozitia curenta a elementului in camp logic).Si mai am tabela actionari (denumire actionare, cod_elem si mai nou exp_logica). Mai mult de atat nu stiu cum as fi putut face ca sa ajung la ecuatia logica!? Daca puteti ... ajutati-ma!
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  SI SAU logic...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement