Keresés
Hírlevél
 
Kiemelt témák
»10 éves a prog.hu
»Párhuzamos programozás
»Párhuzamos végrehajtás == szemléletváltás!
Állás/munka
»Tanárt keresek
»Port.hu film tartalmának kinyerése
»PHP programozó kerestetik
»Fejlesztői megbízásokat/munkát keresek
»Senior .Net fejlesztő szabad kapacitással
» több téma
Tudástár
*PHP if-nél megakadtam
? torrent file helyett txt-t
Mobilinternet használata robotokban
?PHP:keresés szó szerint...
?Delphi Form méretezési probléma
?HelpProvider alkalmazás .HLP fájlban
2 oldalas form
SetFocus hatástalan
?XP-n megy Win7-en megakad (Delphi)
?Hiányos mp3 hallgatás telefonról! C#
A legalsó scrollTop értéket nem veszi figyelembe
3 dív pozicionálása (2 egymás mellé, 1 ezek alá)
?Curl login Joomla-ba (PHP)
*Java Axis webservice file küldés és fogadás
?C# scrollozható form
» több téma
Társalgó
»Az általános műveltség része kellene, hogy legyen a programozni tudás?
»Get flood elleni védekezés
»Újra programozni fog a Facebook alapítója és multimilliárdos elnöke
»Firebird - Több adatbázis vagy egy?
»Clipper kontra XP
»Webshop ár kb...
»Hogy működik egy apróhirdető oldal (MySQL)?
»Körlevél script PHP + MySQL
»New project probléma VS 2010 C#
»Kezdőknek:grafikus felület választás
» több téma
ASPC#C++CSSDelphiFlashJavaJavaScriptPascalPerlPHPPythonuniPaaSVisual BasicVisual C++  »    

Tudástár

»

TDBF Delphi

»

TDBF Delphi

nyitotta: TheX, idő: 2010.09.04., moderátor: netangel, megoldás elfogadva: 2010.09.07. 19:25
  Értesítés változás esetén Felvétel kedvencekhez Küldés emailben Nyomtatható verzió

Kategóriák:Adatbázisok » ADO/DAO/ODBC/BDE
Programozási nyelvek » Delphi

Sorrend:
Időzóna:
Blokkméret:
Oszd meg másokkal is!
Sziasztok!
Delphihez a TDBF nevű ingyenes komponenst használok, egy DBF fájl eléréshez.

Kérdésem az lenne, hogy TDBF-el hogy tudok kódlapot váltani?
Egy DOS alatt készült dbf fájlt kellene megjeleníteni egy Delphiben írt alkalmazásban.

Nem csak egyszeri "konverzióról" lenne szó, mert mindig változik az adatbázis tartalma, ezért mindenképpen a TDBF-et szeretném rávenni arra, hogy helyesen jelenítse meg.
A dokumentációja szerint van neki LanguageId paramétere, és pl.:
Dbf1. LanguageID := DbfLangId_HUN_852;
előzmény
Igen, próbáltam már, de ezt kapom rá:

[DCC Error] Unit1.pas(78): E2003 Undeclared identifier: 'DbfLangId_HUN_852'

szerk:
kellet neki a dbf_lang unit.

Sajnos így se olyan amilyennek lennie kéne.
Állítólag dos/ansi kódolást kéne váltani.
Csak jó kérdés hogy hogyan.. előzmény
Tessék már olvasni azt a nyamvadt doksit...
A Dbf_Lang.pas-ban vannak deklarálva ezek:
DbfLangId_HUN_852 = $22;

Make sure you are using tablelevel >= 4.
Ez is megvan? előzmény
Sőt, a 11. oldalon:
6.4 Translate
{ $ifdef DELPHI_4}
function Translate(Src , Dest: PChar ; ToOem: Boolean): Integer;
override; { virtual}
{ $else}
procedure Translate(Src , Dest: PChar; ToOem: Boolean); override; {
virtual}
{ $endif }
The data stored in a DBF file is written in a specific codepage, the \OEM" codepage. Windows uses the \ANSI" codepage to display data. This function translates between these codepages.
Specifying true for ToOem translates from Windows to DBF. Specifying false for ToOem translates from DBF to Windows.
előzmény
Ez a TableLevel mit jelent pontosan?
Az adatbázis dBase III-ban készült, annak a verziószámát jelentené?
előzmény
Azt írják, a level IV dBase IV-et jelent, III és III+-hoz level3 tartozik. Ez viszont azt jelentheti, hogy a LanguageID módosítása nem fog eredményt hozni, de a Translate metódus attól még jó lehet. előzmény
Értem, akkor marad a Translate method.
Talán sikerül azzal összehozni.

Bár nem tiszta teljesen, hogy mi az első 2 paramétere. előzmény
Tulajdonképpen két karaktertömb (buffer); Src-ben vannak az adatbázisból kiolvasott karakterek, Dest-be kerülnek Translate után a konvertált karakterek. Ha a két buffer ugyanaz, akkor "helyben" történik a konverzió (legalábbis nem írták, hogy ilyet nem lehet). előzmény
Aha, értem, de nem bírom meghívni.

Jól értelmezem, hogy a programomból mondjuk egy esemény hatására meghívom a dbf.Translate(); -ot?
És utána már a konvertált táblának kellene megjelennie? előzmény
Én úgy értelmezném, hogy megnyitsz egy táblát, kiolvasol belőle valamit, és azt konvertálod, de ki tudja... Neten alig van róla valami. Van OnTranslate eseménye is, de hogy az mikor kerül meghívásra, nem tudom. Egy orosz oldalon ezt az eseményt használták a cirill betűs konverzióra, karakterenként iteráltak a forrás-bufferen, és átírták annak byte-jait.

Mindenesetre, a TDBF fórumán ezt találtam: a tábla megnyitása előtt, tablelevel = 3 esetén (ami elvileg neked kell), a DefaultOpenCodePage paramétert a használandó kódlap számára, jelen esetben 852-re kell állítani:
DbfGlobals.DefaultOpenCodePage := 852;
Dbf1.Open;
előzmény
Szia!
Köszönöm szépen a segítséged, de sajnos nem akar jó lenni sehogy.
Úgy tűnik más megoldás után kell néznem, csak nem tudom mi után.
A BDE meg tudná ezt oldani szerinted? előzmény
Kipróbálni nem tudom, de állítólag a BDE 4.0 és afölöttiek kezelik a dBase III-as táblákat is.
Az, hogy nem sikerült, amúgy mit jelent? Elég kevés info az, hogy valami nem megy. előzmény
A TDBF AfterOpen eseményébe megadtam a következőt:

DbfGlobals.DefaultOpenCodePage := 852;
Dbf1.Open;
Ez nem hozott semmi eredményt, pedig elvileg lefutott, próbaként az OnTranslate eseményhez megadtam egy Beep;-et, minden sornál szépen végig csipog, majd betölti a táblát, de semmi változás. előzmény
AfterOpen-be biztosan nem lesz jó, megnyitás előtt kell... előzmény

c:=34; -> 852 kódlap
c:=25; -> 437 kódlap
c:=0; -> Win kódlap


procedure TFormXXX.FormCreate(Sender: TObject);
var
        st: TFileStream;
        c: byte;
begin
  // ÁTÍRÁS 852 KÓDLAPRA
  st:=TFileStream.Create('adatbazis.dbf', fmOpenReadWrite);
  st.Seek(29, soFromBeginning);
  c:=34;
  st.Write(c, 1);
  st.Free;
end;

előzmény
Nézd meg ezt a lapot is: link. Ott egy delphi példa a konverzióra OemToAnsi függvénnyel, az OnTranslate eseménynél, ami nálad már legalább sípolt. előzmény
Köszönöm szépen, csodásan működik is, 437-es kódlappal.
Egyetlen apró gond csak, a nagy á (Á) betűt nem jeleníti meg, helyette "?" van.
előzmény
Sikerült megoldani az "Á" betű kérdést, igaz elég primitív, de a célnak megfelel.
StringReplace();
-el.

Köszönöm mindenkinek a segítséget, a pontot kétfelé osztanám, ez lehetséges? :) előzmény
Nem lehet kétfelé. Hudibandi-nak add, az övé volt a megoldás (én csak guglizgattam). előzmény

Én NEM A PONTOKÉRT SEGÍTEK!

Úgyhogy add a pontokat nyugodtan Interlock-nak.

Talán majd egyszer kinőttök ebből a pontgyűjtési mizériából

előzmény
Köszönöm, de így se könnyítettétek meg a dolgomat, mindenki a másiknak adná :)

A téma címénél maradva, TBDF komponenst használva, miként tudnék új rekordot hozzáadni a táblához?
Próbáltam az InsertRecord();-ot, de arra hibaüzenetet kapok, miszerint: "cannot modify read-only dataset".
Pedig nem read only a tábla, írás jogom is van a fájlra. előzmény

Most viccelsz?

::: példa1 :::

::: Példa2 :::

UI.: 1 támakör 1 kérdés!

előzmény
Köszi, nem vicc volt, csak teljesen a TDBF korlátai között gondolkodtam, erre nem.
TQuery-vel oldottam meg, az már legalább ismerős.

Köszi a segítséget. előzmény
Oszd meg másokkal is!
Belépés
E-mail cím:
Jelszó:

cvonline.hu
»iOS fejlesztő
»Senior web programozó
»Java fejlesztő (Bécs)
»Java fejlesztő (front-end, backend)
»PHP fejlesztő (Ausztria, Németország)
»Solaris rendszermérnök
» még több állás
Kérdésed van?
Problémád, kérdésed van? Segítünk neked is. Csak kattints ide!
RSS források
-Hírek
-Cikkek
-Fórumok
-Állás/munka
Top pontgyűjtők
»Árnyék1.100
»silentworks910
»Robi80910
»szabofe860
»bubori.attila760
»djjjozsi680
»Galovics660
»Riha590
»Frostech0560
»Csaboka2550
A nap kifejezései
»Adatszegmens
»Konstans
»Makró
» ugrás a wikire
Hírek
»Az általános műveltség része kellene, hogy legyen a programozni tudás?
»Újra programozni fog a Facebook alapítója és multimilliárdos elnöke
»Vizuális felülettervezőt adott ki .NET-es Android-alkalmazásfejlesztéshez a Xamarin
» több hír
PC Fórum hírek
»Elvennék és felhasználóinak adnák a Facebook összes pénzét
»Rejtélyes ikont dugdosgat a Microsoft a Windows 8-ban
»Út a Windows 8-ig - a Windows rendszerek három évtizedének története, képekben
»Mától bárki regisztrálhat a so.cl-ra, a Microsoft közösségi oldalára
»Megérkeztek az első képek az Unreal Engine 4 játékmotorról
»Itt az első videó a a Firefox Windows 8-as változatáról
»Nyártól akár 150 megabites nethozzáférést is ad az Invitel
»Kilenc kritikus biztonsági hibát javít az új Google Chrome
Top wikieditorok
»Sting
»Doi
»FlamingClaw
»Argathron
»Csaboka2
»Muki987
»NevemTeve
»Ivn
»Kelemzol
»Joexy
» ugrás a wikire