|
|
Strona 1 z 1
|
[ Posty: 8 ] |
|
Połaczenie z Pervasive ODBC
Autor |
Wiadomość |
lechuedat
Rejestracja: 2009-02-02, 19:03 Posty: 33
|
Połaczenie z Pervasive ODBC
Witam
Na wstępie powiem, że w pisaniu raportów jestem "zielony". Co prawda udało mi się kilka poprawić lub zmodyfikować, ale za pisanie własnych jeszcze się nie brałem.
Mam problem u klienta z połaczeniem się z bazą danych Pervasive ODBC. Otóż klient miał server Novela NetWare, gdzie była baza Symfonii Premium 2008 + server Pervasiva. Niestety któregoś dnia pojawił się na stacjach klienckich bład 3014. Firma która ich do tej pory obsługiwała powiedziała, że dopiero za 2 tygodnie mogą do nich podjechać. Dlatego zgłosili się do nas. Ja niestety Novela NetWare nie znam, dlatego klient zdecydował się na przeniesienie bazy i Pervasiva na WinXP.
Symfonia działa, stacje klienckie też.
Klient miał jednak dodatkowe raporty pisane dla niego, trzy z nich poprawiłem, ale z jednym jest problem.
Z tego co widzę łaczy sie on z bazą Pervasive ODBC i własnie w tym miejscu wyrzuca bład. Oto fragment kodu:
string sConn_string(3) = "Driver={Pervasive ODBC Client Interface};ServerName=sarad;ServerDSN=hmpeska", "Master", "Master"
DISPATCH conn
DISPATCH rs
//debugger
conn = CreateObject("ADODB.Connection")
rs = CreateObject("ADODB.Recordset")
string sQuery = ""
sQuery+="SELECT DK.Kod AS kodDK, DK.data AS dataDK, DP.ilosc AS ILE, Dp.cena AS cenaTW, Dp.jm as jmTW, Dp.cenaBaza as cenaB FROM DK,DP WHERE "
sQuery+=" DP.super = DK.id AND DP.idTW="+(using "%l",idTW)
sQuery+=" AND DP.idKh="+(using "%l",idKH)
sQuery+=" AND (DAYOFYEAR(curdate())-DAYOFYEAR(DK.data))<90"
sQuery+=" AND DP.subtypi=0"
sQuery+=" ORDER BY DK.data DESC"
Czy ktoś moze mi podpowiedzieć (najlepiej łopatologicznie) jak ten raport poprawić?
Ostatnio zmieniony 2009-02-18, 23:01 przez lechuedat, łącznie zmieniany 1 raz
|
2009-02-02, 19:50 |
|
|
Autor |
Wiadomość |
Mix-soft.pl
|
|
|
wrob
Ekspert
Rejestracja: 2008-04-18, 18:52 Posty: 5169 Pomógł: 59
|
Dziwna to firma zeby podjezdzac za 2 tygodnie - my takie rzeczy naprawiamy zdalnie od reki :)
No ale do rzeczy
Sam raport sadze ze jest ok - tylko connect string moze byc zle...
Rozumiem ze serwername i serwerdsn ktore tu podales to juz takie jak masz na xp?
I zalozyles sobie taki DSN na XP/stacji roboczej?
|
2009-02-02, 21:41 |
|
|
lechuedat
Rejestracja: 2009-02-02, 19:03 Posty: 33
|
wrob pisze: Dziwna to firma zeby podjezdzac za 2 tygodnie - my takie rzeczy naprawiamy zdalnie od reki :) No ale do rzeczy Sam raport sadze ze jest ok - tylko connect string moze byc zle... Rozumiem ze serwername i serwerdsn ktore tu podales to juz takie jak masz na xp? I zalozyles sobie taki DSN na XP/stacji roboczej?
Tu na forum podałem fragment orginalnego raportu. Raport przerobiłem w tyn sposób, że w miejscu ServerName wpisałem nazwę komputera, który pełni rolę servera, nie wiem co wpisać w ServerDSN? Po dokonaniu zmian i uruchomieniu raportu, raport przechodzi dalej, ale "czepia" się tej linijki: sQuery+="SELECT DK.Kod AS kodDK, DK.data AS dataDK, DP.ilosc AS ILE, Dp.cena AS .
Podejrzewam, że trzeba właśnie coś pokombinować z połaczeniem z ODBC, ale co?
Może ktoś podpowie jak, albo gdzie szukać jakiejś dokumentacji.
|
2009-02-03, 16:11 |
|
|
lechuedat
Rejestracja: 2009-02-02, 19:03 Posty: 33
|
Z tego co ustaliłem z klientem ten raport na za zadanie z poziomu dokumentu sprzedaży wyświetlić historię sprzedaży dla danego klienta. Skrót klawiaturowy Alt + 1
Po nacisnieciu klawiszy mam bład:
|
2009-02-06, 12:36 |
|
|
Janko muzykant
Rejestracja: 2008-05-19, 22:53 Posty: 48
|
Nie jestem programistą, ale w tym wierszu są operacje na stringach i nic się nie powinno dziać. Chyba, że obciąłeś string do opisanej powyżej postaci (brak ciapek zamykających):
sQuery+="SELECT DK.Kod AS kodDK, DK.data AS dataDK, DP.ilosc AS ILE, Dp.cena AS .
|
2009-02-09, 22:02 |
|
|
lechuedat
Rejestracja: 2009-02-02, 19:03 Posty: 33
|
Testuję sobie ten raport na bazie demo. Zmieniłem ServerName na Nazwa_komputera, ServerDSN na demodata.
Po uruchomieniu raportu mam komunikat:
Może podam cały kod procedury, może ktoś mi pomoże, bo nie mogę sobie poradzić ;(
Kod: //#include "gridForm" Dispatch grd String opis(1) int var,i
record daneDoFormatki string kodDK[250] string dataDK[12] float ile string jm[10] float cenaTW float CenaBaza float rabat endrec daneDoFormatki ddForm(1)
int sub OnZamknij() OnZamknij = 2 //wartośc zwracana przez "execform" endsub
int sub OnCommand(int id, int msg) if msg == 0 then // if id==tabBtn(1) then grd.allowResizeCol = 0 // grd.RowHeader = 5 grd.ColumnCount = 6 grd.RowCount = size(ddform)
grd.Columns(0).name = "Nr dokumentu" grd.Columns(1).name = "Data wystawienia" grd.columns(2).name = "Ilość" grd.columns(3).name = "Jm" grd.columns(4).name = "Kwota" grd.columns(5).name = "Rabat"
grd.Columns(0).FieldType(0,40) //ftCheck grd.Columns(1).FieldType(0,10) //ftCheck grd.Columns(2).FieldType(2,2) //ftCheck grd.Columns(3).FieldType(0,20) //ftCheck grd.Columns(4).FieldType(2,2) //ftCheck grd.Columns(5).FieldType(0,8) //ftCheck // grd.Columns(1).FieldType (128+0,10) // ftString // grd.Columns(2).FieldType(0,40) // ftMoney
FOR I=1 TO i> size(ddForm) grd.rows(i-1).value(0) = ddForm(i).kodDK grd.rows(i-1).value(1) = ddForm(i).dataDK grd.rows(i-1).value(2) = ddForm(i).ile grd.rows(i-1).value(3) = ddForm(i).jm grd.rows(i-1).value(4) = kwota(ddForm(i).cenaTW) grd.rows(i-1).value(5) = ((using "%3.2f",(ddForm(i).rabat))+"%") next i
// grd.Rows(1).Value(6) = 2 grd.Columns(0).Alignment = 0 grd.Columns(1).Alignment = 0 grd.Columns(2).Alignment = 1 grd.Columns(3).Alignment = 0 grd.Columns(4).Alignment = 0 grd.Columns(5).Alignment = 0 grd.Columns(0).locked = 1 grd.Columns(1).locked = 1 grd.Columns(2).locked = 1 grd.Columns(3).locked = 1 grd.Columns(4).locked = 1 grd.Columns(5).locked = 1 grd.rowHeader = 0 // endif
endif
if msg == -1 then for i=1 to i>size(ddForm) grd.deleteRow(i-1) next i
endif
endsub
int sub pokazDane(long idKh,long idTW) string sConn_string(3) = "Driver={Pervasive ODBC Client Interface};ServerName=laptop;ServerDSN=demodata", "Master", "Master"
DISPATCH conn DISPATCH rs
//debugger conn = CreateObject("ADODB.Connection") rs = CreateObject("ADODB.Recordset")
string sQuery = ""
sQuery+="SELECT DK.Kod AS kodDK, DK.data AS dataDK, DP.ilosc AS ILE, Dp.cena AS cenaTW, Dp.jm as jmTW, Dp.cenaBaza as cenaB FROM DK,DP WHERE " sQuery+=" DP.super = DK.id AND DP.idTW="+(using "%l",idTW) sQuery+=" AND DP.idKh="+(using "%l",idKH) sQuery+=" AND (DAYOFYEAR(curdate())-DAYOFYEAR(DK.data))<90" sQuery+=" AND DP.subtypi=0" sQuery+=" ORDER BY DK.data DESC"
int iErrConn = conn.Open(sConn_string(1), sConn_string(2), sConn_string(3)) int iErrRs = rs.Open(sQuery,conn)
String opis(1) int var
if rs.eof==-1 then error ""
While rs.Eof == 0 // opis="" if ddForm(size(ddForm)).kodDK !="" then grow ddForm,1 ddForm(size(ddForm)).kodDK = rs.fields("kodDK").value ddForm(size(ddForm)).dataDK = rs.fields("dataDK").value ddForm(size(ddForm)).ile = rs.fields("ile").value ddForm(size(ddForm)).jm = rs.fields("jmTW").value ddForm(size(ddForm)).cenaTW = rs.fields("cenaTW").value ddForm(size(ddForm)).cenaBaza = rs.fields("cenaB").value if ddForm(size(ddForm)).cenaBaza > 0 then ddForm(size(ddForm)).rabat = ((ddForm(size(ddForm)).cenaBaza-ddForm(size(ddForm)).cenaTW)/ddForm(size(ddForm)).cenaBaza)*100 else ddForm(size(ddForm)).rabat = 0 endif // opis(size(opis)) = using "%s\t%s\t%f\t%6.2f", ,,, rs.MoveNext()
wend String kodTW1,kodKH1 int blad BASETW TW1 BASEKH KH1
KH1.SetKey("id"):KH1.SetKeySeg("id",idKH):blad = KH1.GetRec(EQ) if !blad then kodKH1 = KH1.GetField("nazwa") endif TW1.SetKey("id"):TW1.SetKeySeg("id",idTW):blad = TW1.GetRec(EQ) if !blad then kodTW1 = TW1.GetField("kod")+" \/ "+TW1.GetField("nazwa") endif
FORM "Podgląd sprzedaży", 640, 464 GROUP "", 4, 4, 628, 76 VIEW "Kontrahent : ", KodKH1, 108, 16, 496, 24 VIEW "Towar: ", kodTW1, 108, 48, 496, 24 CONTROL "grid", grd, 4, 80, 628, 308 BUTTON "OK", 176, 396, 264, 36,OnZamknij() int rv = Execform(onCommand,-1)
endsub
int sub main(long idKh,long idTW)
pokazDane(idKh,idTW) shrink ddForm,size(ddForm)
ddForm(size(ddForm)).kodDK = "" ddForm(size(ddForm)).dataDK = "" ddForm(size(ddForm)).ile = 0 ddForm(size(ddForm)).jm = "" ddForm(size(ddForm)).cenaTW = 0
endsub
Raport "wywala" sie własnie na linii 107: Kod: sQuery+="SELECT DK.Kod AS kodDK, DK.data AS dataDK, DP.ilosc AS ILE, Dp.cena AS
Dodam, że raport pobiera i wyświetla historię sprzedaży danego klienta. Jest wywoływany z okna sprzedaży za pomoca klawiszy ALT + 1.
Pomóżcie
|
2009-02-11, 00:18 |
|
|
Spikens
Rejestracja: 2008-09-30, 11:00 Posty: 41
|
Wiec tak
1.) Musisz miec wygenerowane DDFy (jak sa wygenerowane to zazwyczaj w katalogu z firma)
2.) W pervasive control center zakładasz baze danych tzn. nadajesz jej nazwe i wskazujesz katalog (ten z DDFami)
3.) Efektem punktu 2-go bedziesz mial nazwe ktora uzywasz przy ServerDSN
|
2009-02-11, 00:58 |
|
|
lechuedat
Rejestracja: 2009-02-02, 19:03 Posty: 33
|
Spikens pisze: Wiec tak 1.) Musisz miec wygenerowane DDFy (jak sa wygenerowane to zazwyczaj w katalogu z firma) 2.) W pervasive control center zakładasz baze danych tzn. nadajesz jej nazwe i wskazujesz katalog (ten z DDFami) 3.) Efektem punktu 2-go bedziesz mial nazwe ktora uzywasz przy ServerDSN
Spikens Jesteś Wielki. Poszperałem jeszcze co nieco w Google i raport działa!!
Wielkie dzieki
|
2009-02-11, 02:06 |
|
|
|
Strona 1 z 1
|
[ Posty: 8 ] |
|
Kto jest online |
Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 15 gości |
|
Nie możesz tworzyć nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników
|
|
|
|