Search  
Friday, February 10, 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  Visual FoxPro in general  Despartire dbf ...
 Despartire dbf in mai multe xls uri
 
 2/13/2010 12:59:16 PM
User is offlinemrchiu
47 posts


Despartire dbf in mai multe xls uri
 (N/A)
Buna ziua,ma numesc andrei si am o intrebare referitoare la impartirea unui .dbf ce contine peste 200.000 inregistrari.
Initial am vrut sa iau cate 65.000 inregistrari si sa le pun intr-un .xls in sheeturi diferite;nu am gasit cum asa ca am trecut la alta metoda:
Cu urmatorul program am incercat sa separ dbf-ul in mai multe xls uri de 65.000 fiecare

nume = GETFILE('DBF', 'Deschidere tabel:')
COUNT ALL TO x
i=INT(x/65000)+1
GO top
nume = ALIAS() + '.xls'
FOR t=0 TO i
fisier = PUTFILE('Nume Fisier:', nume, 'xls')
COPY next 65000 to (fisier) xl5
endfor

Dupa ce rulez programul, toate bune si frumoase, doar ca am niste inregistrari in plus;am spart un dbf de 325106 inregistrari in 3 xls uri de 65.001 inregistrari si al 4 lea xls care contine vreo 40.000.Calculand numarul de inregistrari din cele 4 xls uri fata de cele din dbf, reiese ca am 3 inregistrari in plus si nu imi pot da seama care sunt ele;am scazut deja inregistrarile de pe randul 1 din xls care contin numele coloanelor deci nu sunt acelea.
Multumesc
 2/13/2010 5:36:25 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A)
COPY NEXT n copiaza n inregistrari incepand cu inregistrarea curenta.
Dupa executarea comenzii pointerul ramane pe ultima inregistrare copiata.
Urmatoarea comanda COPI NEXT incepe cu ultima inregistrare din comanda precedenta.
Verifica in fisierele xls create prima inregistrare din fisier si ultima inregistrare din fisierul precedent. Vei vedea ca sunt identice.
Se rezolva cu o comanda SKIP dupa COPY NEXT


Daniel Buduru
 2/13/2010 5:41:51 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
multumesc pentru promptitudine.
revin cu alte intrebari ^^
1.cum fac sa genereze automat nume .exemplu : fisier1.xls,fisier2.xls;am tot incercat pe acolo diverse variante, nici una nu a mers, de aia am recurs la cerere de la tastatura fisier output.
2. am un camp de tip character, vreau sa folosesc un select pentru a copia toate fisierele cu informatii intr-un alt tabel.
select * from tabela where camp_character is not null
e comanda pe care o folosesc,insa ea imi selecteaza tot, am incercat si alltrim(camp_character) si degeaba. Vreo sugestie?

Multumesc anticipat
 2/13/2010 5:58:56 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A) Modified By Daniel Buduru  on 2/14/2010 1:47:32 PM)
1.
USE tabela
GO TOP
LOCAL lcName, lni, lnRecs
lni=1
lnRecs=65000
lcName=alias()
DO WHILE !EOF()
   COPY NEXT (lnRecs) TO (lcName+TRAN(lni))
   SKIP
   lni=lni+1 &&Updated, lipsea incrementarea indexului
ENDDO

2. Un camp, indiferent de tip, poate fi null numai daca in structura tabelei a fost declarat cu ALLOW NULLS. Dar si in acest caz, campul poate fi gol, dar nu null.
O camp gol (sau o variabila) se testeaza cu EMPTY().
Pentru un camp caracter, EMPTY() returneaza .T. acel camp contine doar spatii, tab, car return si alte caractere netiparibile.
Pentru un camp numeric, EMPTY() returneaza .T. daca valoarea campului e 0.
EMPTY() returneaza NULL pentru un camp null.
ISNULL() returneaza T daca valoarea e null

Comanda de care ai nevoie:

SELECT * FROM tabela WHERE camp_caracter IS NOT null AND NOT EMPTY(camp_caracter)

Sau

SELECT * FROM tabela WHERE NOT ISNULL(EVL(camp_caracter,null))


Daniel Buduru
 2/13/2010 6:04:27 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
multumesc pentru raspunsuri, o sa incerc si revin cu eventuale intrebari
 2/17/2010 10:37:42 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
am observat ca nu se incrementa ^^ am trecut de partea aia si vreau sa il modific iarasi

1.ma gandeam ca dupa fiecare particica scoasa din intreg sa il exporte in xls si sa stearga dbful dupa exportare in xls
2.exista o comanda de ignore errors? de exemplu da eroare cand ajunge la eof.

GETFILE('DBF', 'Deschidere tabel:')
GO TOP
LOCAL lcName, lni, lnRecs
lni=1
lnRecs=65000
lcName=alias()
DO WHILE !EOF()
   COPY NEXT (lnRecs) TO (lcName+TRAN(lni))
select (lni)
use (lcName+TRAN(lni))
copy to (lcName+TRAN(lni)) xl5
use
select
   SKIP
   lni=lni+1 &&Updated, lipsea incrementarea indexului
ENDDO

ceva de genul ma gandeam dar....
ce parere aveti?
 2/17/2010 10:50:07 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A)
Am scris codul direct si nu l-am mai verificat. Fara a fi o scuza, rareori reusesc sa scriu un post fara sa ma intrerup.
Se poate exporta direct in xls, am presupus ca vei adauga restul comenzii ...
Eroarea dispare daca se verifica EOF():

DO WHILE !EOF()
   COPY NEXT (lnRecs) TO (lcName+TRAN(lni)) TYPE XL5
   IF !EOF()
      SKIP
   ENDIF
   lni=lni+1
ENDDO


Daniel Buduru
 2/17/2010 11:45:25 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
merge super, multumesc
 2/18/2010 9:35:30 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
revin cu alta intrebare, am integrat programul intr-un form pe care doresc sa il salvez ca exe;daca il rulez din vfp totul e ok, dar cand rulez prin executabil nu mi se deschide formul
 2/18/2010 9:43:56 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A)
Vezi in FAQ, Cod, sintaxa si comenzi
Q.  De ce se închide programul imediat după apelarea sa ?


Daniel Buduru
 2/18/2010 10:06:43 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
multumesc pentru promptitudine,
cum pot face ca fereastra de pe fundal cea cu visual fox pro sa fie invizibila si sa se vada doar formul, nu cred ca e posibil dar am zis ca pot incerca sa intreb asta.
daca nu e posibila partea de mai sus, pot macar sa o redimensionez sa aibe aceeasi marime cu formularul?
multumesc anticipat
Image005.jpg 
 2/18/2010 10:17:26 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A)
Setezi in designer, la Form
ShowWindow=2 - As Top Level Form


In fisierul Config.fpw pui o linie

SCREEN=OFF

Fisierul il incluzi in proiect, in Others, Text files. Nu trebuie sa fie exclus, altfel trebuie sa il distribui  odata cu exe.


Daniel Buduru
 2/18/2010 10:27:33 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
am facut asta dar acum cand rulez se deschide formul si se deschide instant
Image014.jpg 
 2/18/2010 10:33:16 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A)
Fii un pic mai explicit, nu inteleg unde este problema.

Daniel Buduru
 2/18/2010 10:35:23 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
pai, dupa ce am facut modificarile astea nu mi se mai deschide cand rulez .exe ul
 2/18/2010 10:43:29 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A) Modified By Daniel Buduru  on 2/18/2010 10:51:58 PM)
 mrchiu wrote
....  se deschide formul si se deschide instant

ti-a scapat se deschide in loc de se inchide, asta nu intelegeam.

Un form Top Level nu poate fi modal, pentru ca nu are sens.

Ai nevoie de un program care sa lanseze formul.
Faci un program, sa zicem main.prg.
Il incluzi in proiect si il setezi main.
In acest program pui:

DO FORM form1 &&sau cum se numeste formul
READ EVENTS

Apoi, in Form.Unload pui
CLEAR EVENTS

Update:
Mai pune si Form.desktop=.t.

Daniel Buduru
 2/19/2010 9:23:32 AM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
a mers, va multumesc pentru ajutor
 2/19/2010 10:03:39 AM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
revin cu alta problema,


UPDATE tabela1;
    SET tabela1.valoare =( SELECT SUM(tabela2.b) FROM tabela2 WHERE dtabela2.a in ('LC','LSK','LSM'));
    FROM tabela2 ;   
    WHERE tabela1.a = "LANCOME";


vreau sa fac updateul asta, doar ca imi da sql command is too complex, am cautat si pe google si pe vfp9.0 nu ar fi trebuit sa am problema cu too complex
aveti vreo idee?
 multumesc
 2/19/2010 10:24:12 AM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A) Modified By Daniel Buduru  on 2/19/2010 10:25:21 AM)
Ar fi trebuit sa deschizi un alt thread, problema asta nu mai are legatura cu acest thread.

UPDATE tabela1;
    SET valoare =( SELECT SUM(b) FROM tabela2 WHERE a in ('LC','LSK','LSM'));
    WHERE tabela1.a = "LANCOME"


Daniel Buduru
 2/19/2010 10:47:31 AM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
merge,scuze pentru postare la acelasi topic a unei probleme diferite
multumesc
 4/21/2010 7:26:03 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
revin cu o intrebare

vreau sa modific programul care imparte un dbf in mai multe xls uri de 65k inregistrari, dar vreau sa il fac sa le exporte intr-un folder anume
   COPY NEXT (lnRecs) TO ('/splitoutput/'+(lcName+TRAN(lni))) TYPE XL5

am incercat ceva de genul dar nu merge bine
sugestii?
multumesc
 4/21/2010 7:39:20 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A)
O sugestie ar fi sa si spui ce nu merge bine si eventual ce mesaj de eroare primesti.

Ce se vede direct, e ca la cale ai pus backslash (/). Daca e cale locala. pune \ si mai incearca.
Daca nu ai precizat calea completa, splitoutput trebuie sa fie un subfolder in folderul curent - cel care returnat de curd() - si trebuie sa si existe, intrucat comanda copy ny creeaza si folderul.

Daniel Buduru
 4/21/2010 8:16:59 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
 Daniel Buduru wrote
O sugestie ar fi sa si spui ce nu merge bine si eventual ce mesaj de eroare primesti.

Ce se vede direct, e ca la cale ai pus backslash (/). Daca e cale locala. pune \ si mai incearca.
Daca nu ai precizat calea completa, splitoutput trebuie sa fie un subfolder in folderul curent - cel care returnat de curd() - si trebuie sa si existe, intrucat comanda copy ny creeaza si folderul.

nu primesc nici o eroare
splitout trebuie intradevar sa fie un subfolder

bazele de date sunt scrise 1db,2db,3db,4db si nu trebuia asa
 4/21/2010 8:22:59 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A) Modified By Daniel Buduru  on 4/21/2010 7:44:35 PM)
Scuze, n-am citit cu atentie

lcName='Tabela'
lnRecs=65000
lcFolder='Splitoutput'
IF !DIRE(lcFolder)
    MD (lcFolder)
ENDIF
COPY NEXT (lnRecs)  TO (lcFolder+'\'+lcName+TRAM(lni)) TYPE XL5


Daniel Buduru
 4/23/2010 11:02:13 AM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
COPY NEXT (lnRecs)  TO (lcFolder+'\'+lcName+TRAM(lni)) TYPE XL5  => 'file "tram.prg" does not exist'
 4/23/2010 11:08:33 AM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A)
Daca tram.prg nu exista, incearca cu TRAN(lni) in coamnda cu pricina.


Daniel Buduru
 4/23/2010 11:39:52 AM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
multumesc, a mers doar ca am modificat-o sa mearga cu un alias() pentru fisier care trebuie impartit, insa am alta intrebare
daca fac cu alias, ma pune prima data sa selectez un dbf pe care il va imparti, insa il memoreaza dupa aceea, e vreo modalitate sa dau clear alias() sau ceva de genul?
 4/23/2010 11:45:38 AM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A)
Nu inteleg ce e cu alias() si ce faci cu el.
Cum arata codul?


Daniel Buduru
 4/23/2010 12:03:35 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
LOCAL lcName, lni, lnRecs
lni=1
lnRecs=65000
lcName=alias()
lcFolder='splitoutput'
IF !DIRE(lcFolder)
    MD (lcFolder)
ENDIF
DO WHILE !EOF()
   COPY NEXT (lnRecs)  TO (lcFolder+'\'+lcName+TRAN(lni)) TYPE XL5
   IF !EOF()
      SKIP
   ENDIF
   lni=lni+1
ENDDO
 4/23/2010 12:16:34 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A)
Comanda COPY se executa asupra unei tabele sau cursor deschide in zona curenta.
Deschide sau selecteaza tabela pe care vrei sa o exporti in excel inainte de bucla DO WHILE.
Aveai totusi un cod care functiona. Ai vrut sa il modifici astfel incat sa salveze intr-un folder. Ti-am corectat sintaxa in comanda Copy si ti-am aratat cum se verifica existenta folderului si eventual se creeaza - daca nu exista. Inlocuieste ce trebuie in codul initial si va merge.
Sa ne intelegem totusi asupra unui aspect: eu nu ti-am dat si nu iti voi da un cod care sa-ti faca toata treaba de la un capat la altul.
Ar trebui sa poti folosi fragmentele de cod pe care le primesti fie ca exemplu, dupa care sa iti construiesti propriul cod, fie sa le completezi cu ceea ce e necesar pentru a functiona in contextul tau.


Daniel Buduru
 4/23/2010 4:34:06 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
 Daniel Buduru wrote
Sa ne intelegem totusi asupra unui aspect: eu nu ti-am dat si nu iti voi da un cod care sa-ti faca toata treaba de la un capat la altul.
Ar trebui sa poti folosi fragmentele de cod pe care le primesti fie ca exemplu, dupa care sa iti construiesti propriul cod, fie sa le completezi cu ceea ce e necesar pentru a functiona in contextul tau.

nici nu ma asteptam la asa ceva,nu sunt genul care vrea mura in gura
. stiu ce face copy si singurul motiv pentru care am intrebat a fost pentru ca nu mergea, nu am banuit ca daca as muta alias() cateva randuri mai jos ar influenta ceva.

multumesc pentru promptitudine, am reusit pana la urma ^^
o zi buna


 10/7/2010 4:43:45 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
revin cu o intrebare legata de acest cod
am modificat putin programul astfel:
fiecare xls de 65000 inregistrari este adaugat intr o lista

thisform.clistbox1.AddItem(lcName+TRAN(lni))

ce vreau sa fac este ca atunci cand dau dublu click pe un nume de fisiere din acest listbox , acesta sa se deschida in excel.Am cautat pe net si am gasit urmatoarea varianta pusa la listbox la dbl click

oExcel = CreateObject("Excel.Application")
oWorkbook = oExcel.Application.Workbooks.Open(FULLPATH(thisform.clistbox1.value))
oExcel.visible = .T.

insa imi da aceasta eroare

OLE IDispatch exception code 0 from Microsoft Office excel: 'C:\users\andrei\desktop\d311.xls'could not be found. check the spelling etc

Acel object functioneaza daca in loc de (FULLPATH(thisform.clistbox1.value)) pun o cale gen "c:\d311.xls"
Aveti vreo idee?

Multumesc anticipat.
 10/7/2010 5:06:45 PM
User is offlineGrigore Dolghin
3521 posts
www.class-software.eu
1st






Re: Despartire dbf in mai multe xls uri
 (N/A)
Pai lucrurile sunt simple: fisierul ala e in locatia C:\users\andrei\desktop\d311.xls? (personal, cred ca nu e). Uite-te unde il salvezi si ce valoare ai in clistbox1.value, ca acolo e problema. In listbox ai o cale de cautare, fisierul e la dracu'n praznic pe disc si e normal sa nu-l gaseasca.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 10/7/2010 5:09:16 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Despartire dbf in mai multe xls uri
 (N/A)
Daca exista fisierul 'C:\users\andrei\desktop\d311.xls' poate fi o problema de drepturi de acces pe acela folder.

Daca insa calea
C:\users\andrei\desktop\ nu este corecta, e o alta problema. Incearca sa pui folderul in care sunt fisierele xla in calea de acces vfp.

Eu as evita sa folosesc FULLPATH, si as merge mai degraba pe calea completa.
Poti face o lista cu doua coloane, pe una ai doar numele fisierului, pe cealalta ai calea completa.
list.ColumnCount=2
list.ColumnWidths='120,0' &&se ascunde coloana a doua
list.BoundColumn=2 && valoarea returnata in value va fi din coloana 2

Vezi in help AddItem si AddListItem pentru adaugarea valorilor in alte coloane.

Poti crea un cursor cu cele doua campuri, pe care sa il populezi in ciclu, apoi sa il folosesti ca sursa pentru lista - e varianta pe care as alege-o.
Sau poti configura lista sa-ti afiseze fisierelele xls din acel folder - vezi in help la rowsourcetype





Daniel Buduru
 10/7/2010 8:54:20 PM
User is offlinemrchiu
47 posts


Re: Despartire dbf in mai multe xls uri
 (N/A)
multumesc pentru raspunsuri
am folosit varianta cu fisierele xls dintr-un director
o seara placuta
  Visual FoxPro  Visual FoxPro in general  Despartire dbf ...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement