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  Concepere baza ...
 Concepere baza de date
 
 12/10/2010 9:14:17 PM
User is offlineji_ci
191 posts
5th


Concepere baza de date
 (Romania)
Am o baza de date cu tabelele: tip_echipamente(tip_echip,cod_tipechip), den_echip(den_echip,cod_echip), tensiuni(tensiune, cod_tens). Fiecare den_echip poate fi de mai multe tipuri de echipamente si tensiuni diverse. De ex. den_echip=Circuit1 este Circuit1 lea(tip_echipament) 110kV(tensiune)
                                                              Circuit1 celula(tip_echipament) 110kV(tensiune)
                                                              Circuit1 bara(tip_element) 220/110kV(tensiune)
Vreau ca la selectarea echipamentului sa vad echipamentul cu variantele de mai sus. Ptr asta am mai creat un table echip_tipechip(cod_echip,cod_tipechip) si altul echip_tens(cod_echip, cod_tens) dar tot nu reusesc sa construiesc vederea de care am nevoie. Unde e greseala?

 12/10/2010 11:06:28 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Concepere baza de date
 (N/A) Modified By Daniel Buduru  on 12/11/2010 12:12:23 AM)
Asa cum prezinti problema, un echipament este definit prin cod_echipament, cod_tipechipament si cod_tens.
Prin urmare, iti trebuie o tabela de echipamente, care sa contina coloanele id_echipament, cod_echipament, cod_tipechipament si cod_tensiune.
Aceasta tabela contine cate o inregistrare pentru
id1 Circuit1 Celula 100Kv
id2 Circuit1 Bara 220/110KV
bineintels, doar codurile.
View-ul se obtine cu urmatorul select:

Select idechipament, den_echipament, tip_echipament, tensiune  ;
From echipamente;
left join den_echip on echipamente.cod_echip=den_echip.cod_echip;
left join tip_echipamente on echipamente.cod_tipechipament=tip_echipamente.cod_tipechipament ;
left join tensiuni on echipamente.cod_tensiune=tensiuni.cod_tensiune ;
where echipamente.cod_echipament=codul_echipamentului_selectat ;
order by 2,3,4

Oricum, definirea echipamentului ar trebui revazuta. Daca poti avea aceeasi denumire si acelasi acelasi tip de echipament pentru tensiuni de lucru diferite, a avea aceeasi denumire pentru tipuri de echipament diferite nu este admis.


Daniel Buduru
 12/10/2010 11:59:49 PM
User is offlineji_ci
191 posts
5th


Re: Concepere baza de date
 (Romania)
Functioneaza selectul! Am situatii in care la aceeasi denumire am acelasi tip de echipament dar tensiuni diferite! De ce nu este admis?
 12/11/2010 12:59:04 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Concepere baza de date
 (N/A)
Un articol (reper, echipament) trebui definit in mod unic, chiar si atunci cand are mai multe sortimente (sau sorto-tipo-dimensiuni).
Daca trebuie sa gestionezi fabricatia, stocarea, consumul, aprovizionarea, atunci trebuie sa identifici articolul in mod unic, in cazul tau cate un echipament pentru fiecare combinatie de denumire, tip si tensiune, iar numele lui nu trebuie sa poate crea confuzii.
E corect sa denumesti echioamentul 'circuit celula 1'. sau "circuit bara 1', dar nu simplu 'Circuit1',
Mai degraba, "circuit" ar fi o categorie, pe care sa o atasezi echipamentului "circuit bara" sau "circuit celula", astfel incat sa obtii gruparea pe care o doresti.
Deci tabela aia den_echip ar fi cel mai corect numita "categorie", iar tabela echipament ar avea campurile cod_echipament si den_echipament, chiar daca denumirea o vei compune din categorie, tip si tensiune.


Daniel Buduru
 12/11/2010 8:17:21 AM
User is offlineji_ci
191 posts
5th


Re: Concepere baza de date
 (Romania)

Da ... n-am fost inspirat cand am denumit tabela den_echip ... ptr ca asa si am facut baza de date ca denumirea echipamentului sa fie compusa din categorie(cum ai spus tu), tensiune si tipul echipamentului. Deci asa stand lucrurile nu cred ca e o problema daca am categorii cu acelaasi tip de echipament dar tensiuni diferite!? ex Circuit celula 110kV si Circuit celula 220kV.

Inca o intrebare>In vfp6 cum pot pune Select-ul pe care l-am realizat ca sursa pentru un grid?

 12/11/2010 10:31:16 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Concepere baza de date
 (N/A)
Doar echipamentul trebuie sa fie definit in mod unic, adica sa nu fie doua echipamente cu acceasi denumire, dar care sa difere printr-o caracteristica.
Daca ai un echipament "Circuit celula 110kV" si un alt echipament "Circuit celula 220kV", ele pot face parte din acceasi categorie.

Poti afisa in grid rezultatul comenzii select in mai multe moduri:
1. Grid.Recordsource='Select ....'
    Grid.RecordSourceType=4 &&SQL Statement

2. Select .... into cursor crsgrid
    grid.recordsource='crsgrid'
    grid.recordsourcetype=1 &&Alias

3.Creezi un view :
   Create sql view vechipamente as select ...
   Sau folosesti view builderul
   Apoi deschizi view-u cu USE vechipamente, iar in grid.recordsource ai 'vechipamente' si grid.recordsourcetype=1
   In varianta asta, daca folosesti parametri in view, poti folosi Requery('vechipamente') pentru a afisa alte valori in view, fara a pierde sursa gridului.

Daniel Buduru
 12/11/2010 11:12:51 AM
User is offlineji_ci
191 posts
5th


Re: Concepere baza de date
 (Romania)
Eu incercam varianta a doua dar introducand in fereastra cu proprietati ale gridului! Si normal ca nu-mi mergea ptr ca Select-ul il faceam la Init-ul gridului. Acum l-am facut la even Load si merge. Mersi mult! Poate o sa mai apelez .... mai am de definit elementul si operatia.
 12/11/2010 3:24:36 PM
User is offlineji_ci
191 posts
5th


Re: Concepere baza de date
 (Romania)

La gridul la care am ca sursa Selectul ce l-am facut ptr denumirea echipamentului am un camp de tip combo in care as vrea sa pun ca sursa o tabela stari_operative pentru a selecta starea operativa a echipamentului. Nu reusesc sa fac asta desi intr-un alt proiect facusem, dar aveam ca sursa a gridului un view! Si daca incerc sa fac o vedere cu create sql view ... nu-mi iese una corecta!

 12/12/2010 6:10:03 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Concepere baza de date
 (N/A)
Presupun ca nu reusesti actualizarea campului, nu introducerea unui combo in grid.
Cursorul rezultat al comenzii select este readonly si nu este actualizabil. Poti transforma acest cursor intr-unul actualizabil, dar este mai comod sa folosesti un view.
Fie creezi view-ul in builder, fie cu comanda CREATE SQL VIEW AS .... apoi modifici view-ul rezultat in view builder si setezi corespunzator campul cheie si campurile actualizabile. Doar campurile din tabela echipamente trebuie sa fie actualizabile.
Daca zici ca nu-ti iese o vedere corecta, incearca sa explici ce intelegi prin asta.

Daniel Buduru
 12/12/2010 7:01:04 PM
User is offlineji_ci
191 posts
5th


Re: Concepere baza de date
 (Romania)
Da despre camp era vorba! Combo am reusit sa introduc in grid!
M-am gandit ca din cauza lui readonly ... am vazut ca in vfp7 se poate face SQL readwrite ... dar eu am vfp6.
Deci oricum as creea view-ul (cu CREATE SQL sau in builder) imi da eroare la salvarea view-ului > SQL: Column "field | variable" is not found (Error 1806)

 12/12/2010 7:20:08 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Concepere baza de date
 (N/A) Modified By Daniel Buduru  on 12/12/2010 8:27:29 PM)
Posteaza aici comanda create sql view cu pricina.

Edit:
Posibil ca eroarea sa fie in clauza where.
Ar trebui sa ai ceva de forma:

select ... where tabela.camp=?m.variabila_camp

Defineste variabila/variabilele din clauza where inainte de comanda create view - poti face asta in command, ex variabila_camp=''
Daca ai creat view-ul cu builderul, inainte de salvare intra in menu, query, view parameters si defineste acolo variabilele folosite in filtru si tipul lor.


Daniel Buduru
 12/12/2010 7:25:43 PM
User is offlineji_ci
191 posts
5th


Re: Concepere baza de date
 (Romania)
Create sql view view_echipamente as Select distinct trim(tip_echip)+' '+trim(tens_echip)+' '+trim(nume_echip);
From echipamente;
left join nume_echip on echipamente.cod_enume=nume_echip.cod_enume;
left join tip_echip on echipamente.cod_etip=tip_echip.cod_etip ;
left join tensiuni_echip on echipamente.cod_etens=tensiuni_echip.cod_etens ;
where echipamente.cod_enume=?nume_echipament
 12/12/2010 7:57:49 PM
User is offlineji_ci
191 posts
5th


Re: Concepere baza de date
 (Romania)
Am intrat si la view parameter si am definict variabila! Tot aceasi eroare imi da> SQL: Column "cod_etens" is not found (Error 1806)
 12/12/2010 8:31:47 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Concepere baza de date
 (N/A)
1. Mesajul e clar, fie in echipamente, fie in tensiuni_echip nu exista coloana cod_etens. Verifica peste tot numele, e ceva schimbat undeva.

2. Cu structura asta nu poti obtine un view actualizabil intrucat nu ai o cheie primara.



Daniel Buduru
 12/12/2010 8:55:45 PM
User is offlineji_ci
191 posts
5th


Re: Concepere baza de date
 (Romania)
1. cod_etens este in ambele table, nu cred ca asta e cauza .... depinde de ordinea in care aduc tabelele in view ca uneori primesc mesaj de eroare cu cod_etip, alteori cu cod_enume
2. am cheie primara cod_echip in tabela echipamente pe care am adaugat-o in view si tot la fel
 12/12/2010 9:18:56 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Concepere baza de date
 (N/A)
Mda. Daca ai citi si respecta ce scris cu rosu in partea de sus a paginii, ai scuti si din tipul tau, si din al celor care incearca sa-ti dea o solutie...
Codul postat mai sus nu contine nici un camp de care sa te legi cu acel combo, si nici o tabela care s apoata fi actualizata. Nu pare a fi codlu pe care l-ai folosit in aplicatie, cand ti-a mers gridul, dar nu si cu acel combo.



Daniel Buduru
 12/12/2010 9:45:07 PM
User is offlineji_ci
191 posts
5th


Re: Concepere baza de date
 (Romania)
create sql view view_echipamente as Select distinct trim(tip_echip)+' '+trim(tens_echip)+' '+trim(nume_echip), cod_stare, cod_echip;
From echipamente;
left join nume_echip on echipamente.cod_enume=nume_echip.cod_enume;
left join tip_echip on echipamente.cod_etip=tip_echip.cod_etip ;
left join tensiuni_echip on echipamente.cod_etens=tensiuni_echip.cod_etens ;
where echipamente.cod_enume=?nume_echipament

....daca ajuta cu ceva! Nu am trimis atunci codul intreg ptr ca am inteles ca problema mea e ca nu pot crea un view! Deci in primul rand trebuie sa realizez view-ul si apoi problema cu combo e rezolvata! cod_stare trebuie actualizat in tabela echipamente! La grid unde am combo am codul> thisform.grdEchipamente.column2.combo1.rowsource = 'stari_operative.den_stare'
                                                                                                                                   thisform.grdEchipamente.column2.combo1.rowsourcetype=6

Iar la combo la InteractiveChange am> replace cod_stare with this.listindex
                                                           tableupdate()
 
Dar repet problema mea e creearea view-ului!

 12/12/2010 9:48:41 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Concepere baza de date
 (N/A)
Deci comanda select ca atare functioneaza fara probleme dar nu poti crea view-ul?
Ce versiune de vfp ai?


Daniel Buduru
 12/12/2010 10:08:55 PM
User is offlineji_ci
191 posts
5th


Re: Concepere baza de date
 (Romania)
Vfp6. Daca aveam vfp7 puteam sa dau READWRITE la select si mergea si actualizarea!
Da selctul functioneaza ... dar imi da erorile pe care le-am zis cand il creez ... indifernt cum fac asta ori cu CREATE SQL VIEW ori din builder! Poate e mai simplu sa-ti trimit baza de date!
 12/12/2010 10:20:15 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Concepere baza de date
 (N/A)
Trebuia sa precizezi versiunea. E o limitare a vfp6, posibil si 7, la numarul de tabele in left join.
Nici cu readwrite nu se rezolva problema, intrucat readwrite perimite doar scrierea in cursor, dar nu actualizeaza tabela de baza.
In tabela echipamente pune un camp denumire echipament, pe care il completezi la crearea inregistrarii cu denumirile concatenate. Nu vei mai avea nevoie de celelalte tabele in view.
Clauza distinct din selecul tau spune multe. Asta inseamna ca accepti duplicate in tabela echipamente. Nu asa se structureaza o baza de date. Ar trebui sa te documentezi mai mult.

Daniel Buduru
 12/12/2010 10:29:44 PM
User is offlineji_ci
191 posts
5th


Re: Concepere baza de date
 (Romania)
Ok! Multumesc! Acum inteleg de ce nu puteam sa creez view-uri din mai multe tabele! Da asa e ... mai trebuie si citit!
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  Concepere baza ...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement