2010-09-25 10 views
7

Win32 के लिए डेल्फी में, बीडीई के बिना मूल रूप से एक डीबीएफ फ़ाइल को कैसे पढ़ और लिखना है? मुझे पता है कि वेब में कुछ घटक उपलब्ध हैं, लेकिन मैंने कभी भी उनमें से कोई भी उपयोग नहीं किया है, इसलिए मुझे नहीं पता कि किसको चुनना है (यदि कोई है)।मूल तरीके से डीबीएफ को कैसे पढ़ और लिखना है?

उत्तर

14

आप एक DBF फ़ाइल

तक पहुँचने के लिए चौथाई नमूना कोड (एक TAdoConnection और TAdoDataSet घटकों का उपयोग) देखें ADO का उपयोग कर सकते हैं।

var 
dbf_folder : string; 
begin 
    dbf_folder:='c:\bdd';//set your dbf folder location here 
    ADOConnection1.LoginPrompt:=false; 
    ADOConnection1.ConnectionString:=Format('Provider=Microsoft.JET.OLEDB.4.0;Data Source=%s;Extended Properties=dBase IV;',[dbf_folder]); 
    try 
    ADOConnection1.Connected:=True; 
    ADODataSet1.CommandText:='Select * from file.dbf'; //make your SQL query using the name of the dbf file 
    ADODataSet1.Open; 
    while not ADODataSet1.eof do 
    begin 
    //do your stuff here 
    //ADODataSet1.FieldByName('').AsString 
    ADODataSet1.Next; 
    end; 
    except 
    on E : Exception do 
     ShowMessage(E.Message); 
    end; 
end; 
+1

+1 "आउट ऑफ़ द बॉक्स" डेल्फी समाधान –

+0

यह सिर्फ मेरे उद्देश्य – eKek0

+0

त्रुटि के लिए काम करता है: "नेटवर्क या डिस्क त्रुटि" :( –

0

यदि आपको इंडेक्स की आवश्यकता नहीं है तो डीबीएफ फ़ाइल को पढ़ना मुश्किल नहीं है। प्रारूप बहुत सरल है। एक हेडर निश्चित आकार के रजिस्टरों के लिए पीछा किया। प्रत्येक रजिस्टर में एक झंडा है जो इंगित करता है कि यह हटा दिया गया है या नहीं। मैं सुझाव देता हूं कि एक घटक ढूंढें जो आप चाहते हैं। आप कुछ in Torry's Delphi pages पा सकते हैं।

1

मैंने फायरबर्ड के साथ शुरू होने से पहले कई वर्षों तक सॉफ्टवेयर साइंस से Topaz का उपयोग किया। यह हमेशा एक उत्कृष्ट पुस्तकालय था, एक भयानक मैनुअल और अच्छा तकनीकी समर्थन था। यह इंडेक्स का समर्थन करता है और यहां तक ​​कि एक मेमोरी विकल्प भी है। मुझे लगता है कि यह एक अच्छा विकल्प होगा।

+0

दुर्भाग्य से मैं हाल ही में पता चला आगे क्या करना है (के बाद मैं पहले से ही परिवर्तित कोड पर भी कई घंटे खर्च किया था) पता है कि यह शून्य मान समर्थन नहीं करता। वे फ़ील्ड प्रकार के आधार पर स्वचालित रूप से खाली तारों या 0 में परिवर्तित हो जाते हैं। इस लापता फीचर ने टॉपज को मेरे लिए बिल्कुल बेकार बना दिया। :-(अब मैंने अपने "60 दिनों के पैसे वापस" प्रस्ताव के लिए आवेदन किया है। मुझे उम्मीद है कि वे इसके साथ चिपके रहेंगे, इसलिए कम से कम मुझे उन 100 अमेरिकी डॉलर वापस मिलेंगे। समय पहले से ही खो गया है। – dummzeuch

+0

मुझे खेद है कि यह उपयुक्त नहीं था जब वे नियमित रूप से उनके साथ निपटाते थे तो वे एक बहुत ही पेशेवर ग्राहक उन्मुख कंपनी थे। मुझे आशा है कि आपका अनुभव उतना ही अच्छा होगा जितना मेरा था। फिर, मुझे खेद है कि मैंने आपको एक अंधे गली के नीचे इंगित किया। – jrodenhi

+0

jrodenhi: निश्चित रूप से आपकी गलती नहीं थी। मुझे केवल यह पता चला कि मैंने पहले ही यह निर्धारित किया था कि टोपेज़ ने जो कुछ भी किया था, वह नहीं किया। मैंने इस टिप्पणी को अन्य लोगों को इस कमी के बारे में जागरूक करने के लिए पोस्ट किया ताकि वे इस पर जितना समय बर्बाद न करें – dummzeuch

1
+1

मैंने इसका उपयोग किया, लेकिन मुख्य रूप से गति के कारण टीडीबीएफ में माइग्रेट किया गया कारणों के बावजूद विंग ने अपोलो –

8

मैंने TDBF का उपयोग किया जब मैं अभी भी डीबीएफ फाइलों (कुछ विरासत ऐप्स) के साथ काम कर रहा था। मैं अभी भी उन ऐप्स के रखरखाव के लिए इसका उपयोग करता हूं। यह मुफ़्त है, इसमें बहुत सारी सुविधाएं हैं और अच्छी तरह से काम करती है।

+0

"फ्री" का अर्थ इस मामले में एलजीपीएल खरीदा। वाणिज्यिक ऐप्स के लिए अच्छा नहीं है। – dummzeuch

+0

वाणिज्यिक ऐप्स के लिए यह अच्छा क्यों नहीं होगा? यदि आप इसे संशोधित करते हैं तो आपको केवल टीडीबीएफ स्रोत प्रकाशित करना होगा; अन्यथा आप कोड में बस लिंक कर सकते हैं .. – reiniero

+1

यदि आप * स्थिर * लिंक करते हैं तो आपको न केवल tdbf स्रोत कोड प्रदान करना होगा बल्कि आपके प्रोग्राम का पूरा स्रोत प्रदान करना होगा। Tdbf को गतिशील रूप से लिंक करने के लिए आपको संकुल के साथ काम करना होगा। – dummzeuch

0

एडीओ मेरे लिए काम नहीं किया है, लेकिन मैं BDE का उपयोग कर मेरी DBF फ़ाइल को खोलने में कामयाब रहे:

से एक डेटा एक्सेस धारा (या BDE, डेल्फी के अपने संस्करण पर निर्भर करता है) मैं एक TDataBase और, TTable घटकों डाल (यदि आप चाहें तो आप TQuery का उपयोग कर सकते हैं)।

TDataBase घटक पर डबलक्लिक करके मैंने सेटअप संवाद खोला। 'Db_name' के साथ नाम फ़ील्ड भरें (नाम मनमानी है), ड्राइवर का नाम = 'मानक', पैरामीटर फ़ील्ड: 'पथ = सी: \ पथ \ से \ DBF_FILES \'। फिर मैंने कनेक्ट = सही सेट किया।

फिर टीटीबल घटक में मैंने डेटाबेस नाम = 'db_name' सेट किया - जिसे मैंने टीडीटाबेस घटक में सेट किया था। और TableName प्रॉपर्टी सेट 'DB_FILE.dbf' जो निर्दिष्ट फ़ोल्डर में स्थित थी। सक्रिय = सही।

आप क्या

संबंधित मुद्दे