Czy ktoś, kiedykolwiek podłączał tabele z programu Subiekt (DOS foxpro) ??
Próba uaktywnienia takiej bazy w delphi kończy sie u mnie komunikatem : "Could not find language driver". Próba otwarcia tabeli przez Database Deskop kończy się błędem jak wyżej. Przećwiczyłem wszelkie możliwe ustawienia w BDE Administrator zgodnie z sugestią błędu. Nie wiem co jest grane, co jest źle. Używam delphi 7 enterprise z serwis packiem. Proszę o pomoc, bez tego dołączenia się nie moge kontynuować projektu :|
Jako ciekawostkę podam, że excel bez najmniejszego oporu otwiera tabele jako dbase i nawet zgadza sie strona kodowa. Nic z tego nie rozumie. Pozdrawiam.</quote>
poczytaj to
Dzięki. Nic ciekawego z tego nie wynika. Na pewno winny jest indeks, który prawdopodobnie ma coś w sobie nie obsługiwane w delphi (przez sterownik). Można obejść to po przez wyzerowanie 28 bajtu w nagłówku tabeli i wszystko śmiga w delphi. Artykuł na ten temat jest na <url>http://www.borland.pl/cgi-bin/tip.exe/showtip?mode=1&id_tip=20
Jest to połowiczne rozwiązanie, bo bardziej potrzebuję dostepu online do tabel, zerując 28 bajt muszę najpierw skopiować tabelę i dopiero przeprowadzać manipulacje, co przy dużych rozmiarach nie zapewnia dostępu w czasie rzeczywistym. Może ktoś ma jakiś rozsądny pomysł ??
Wiem, że w dzisiejszych czasach to sztuka dla sztuki i wielu już nie pamięta, że kiedyś potęgą był clipper i foxpro. Pozdrawiam</url>
Jeśli uszkodzony byłby index to także Subiekt by nie działał na takiej bazie. Z tych linków jedno wynika bardzo jasno - należy olać BDE i spróbować czegoś innego. Cały problem nie polega na uszkodzonym indexie jak sugerujesz ale na niezgodności tabeli foxpro subiekta i tego, który zaimplementował Borland. Poszukaj innych komponentów np. TDBF, Zeos albo Adventage.
Prawdopodobnie w definicji indeksu została użyta funkcja niestandardowa napisana przez autorów subiekta. Bez posiadania biblioteki z taką funkcją nie ma sposobu na poprawną aktualizację rekordu (albo pojawi się błąd przy próbie aktualizacji, albo aktualizacja uszkodzi indeks)
Można otworzyć taką tabelę do odczytu używając sterownika ODBC (używając komponentów ADO) Visual FoxPro Tables (bądź w polskiej wersji Tabele Visual FoxPro). Ponieważ Microsoft nie wspiera już tego sterownika i nie dołącza go do MDAC trzeba go indywidualnie ściągnąć i zainstalować ze strony Microsoftu. Ostatni MDAC zawierający ten sterownik to MDAC 2.5 http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=c57692e9-dde7-4a60-b586-5d4fd6794db6&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fe%2fe%2f4%2fee4fe9ee-6fa1-4ab6-ab8c-fe1769f4edcf%2fmdac_typ.exe
bedziol napisał(a)
Można otworzyć taką tabelę do odczytu używając sterownika ODBC (używając komponentów ADO) Visual FoxPro Tables (bądź w polskiej wersji Tabele Visual FoxPro). Ponieważ Microsoft nie wspiera już tego sterownika i nie dołącza go do MDAC trzeba go indywidualnie ściągnąć i zainstalować ze strony Microsoftu. Ostatni MDAC zawierający ten sterownik to MDAC 2.5 http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=c57692e9-dde7-4a60-b586-5d4fd6794db6&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fe%2fe%2f4%2fee4fe9ee-6fa1-4ab6-ab8c-fe1769f4edcf%2fmdac_typ.exe
próbowałeś i wiesz, że się da? Jeśli tak to OK ale z moich informacji wynika, że w subiekcie format tabeli jest mocno zmodyfikowany i nie trzyma się żadnego standardu poza ich własnym.
Nie sugeruje, ze jest uszkodzony indeks tylko ze zerujac 28 bajt pozbawiamy tabeli indeksow i tym samym staje sie ona czytalna jako np. dbase, z tym kopiowaniem i zerowaniem powiem szczerze ze dziala calkiem niezle. Prawdą jest że subiekt ma swój sposób na tabele,a w szczególności na indeksy. Excel, wykozystujacy ODB też zeruje ten bajt :) , więc prawdopodobnie, nie ma łatwego sposobu na pracę online, a żeby kombinować coś bardziej złożonego, to po prostu jest to wszystko za bardzo przeżyte i nie ma sensu. Wszysko jest OK póki tylko się czyta, inaczej gdyby trzeba było coś zapisać :/
Pozdrawiam
Misiekd - przecież napisałem, że do odczytu (w sensie tylko do odczytu)
bedziol napisał(a)
Misiekd - przecież napisałem, że do odczytu (w sensie tylko do odczytu)
le indeksy też są wtedy otwierane więc nie wim co to za różnica czy do odczytu czy odczytu i zapisu, ale temat chyba nieaktualny...
No i tu jest ta zaleta ADO, że potrafi otworzyć tabelę nawet jeśli nie potrafi odczytać indeksów (oczywiście nie ma również wtedy możliwości wyszukiwania czy filtrowania z wykorzystaniem indeksów ale działa przetestowałem)
Tez potrzebowałem podłączyć się do baz Subiekta 4 z Delphi, oto po kolei co trzeba zrobic:
-
Faktycznie najlepiej użyć do tego np: ADOQuery, ale:
-
Najpierw należy pobrać sterownik do bazy FoxPro
http://msdn2.microsoft.com/en-us/vfoxpro/bb190233.aspx
, zainstalować go, i w Źródłach danych ODBC -> Systemowe DNS dla Visual FoxPro Tables
ustawić ścieżkę do katalogu w którym mamy pliki bazodanowe -
Potem już tylko budujemy dla ADO ConnectionString, Dostawca: Microsoft OLE DB Provider
for ODBC Drivers i nazwa źródeł: Visual FoxPro Tables (zakładam, że podłączam tabele)
Provider=MSDASQL.1;Persist Security Info=False;Data Source=Visual FoxPro Tables
-
w sekcji SQL, wpisujemy zapytanie np:
select * from "c:\temp\DOKUMENT.DBF"
I to wszystko, u mnie działa
chłopie walni się w czache - zobaz na datę ostatniego postu!
A mi się akurat przydało to rozwiązanie, dzięki -artekzet.