Posty bez odpowiedzi |oraz Aktywne tematy Dzisiaj jest 2024-11-21, 23:14x



Odpowiedz w temacie  [ Posty: 8 ] 
Połaczenie z Pervasive ODBC 
Autor Wiadomość

Rejestracja: 2009-02-02, 19:03
Posty: 33
Post 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
Wyświetl profil
Autor Wiadomość
 


Ekspert
Ekspert
Awatar użytkownika

Rejestracja: 2008-04-18, 18:52
Posty: 5169
Pomógł: 59
Post 
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
Wyświetl profil

Rejestracja: 2009-02-02, 19:03
Posty: 33
Post 
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
Wyświetl profil

Rejestracja: 2009-02-02, 19:03
Posty: 33
Post 
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:
Obrazek


2009-02-06, 12:36
Wyświetl profil

Rejestracja: 2008-05-19, 22:53
Posty: 48
Post 
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
Wyświetl profil

Rejestracja: 2009-02-02, 19:03
Posty: 33
Post 
Testuję sobie ten raport na bazie demo. Zmieniłem ServerName na Nazwa_komputera, ServerDSN na demodata.
Po uruchomieniu raportu mam komunikat:
Obrazek

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
Wyświetl profil

Rejestracja: 2008-09-30, 11:00
Posty: 41
Post 
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
Wyświetl profil

Rejestracja: 2009-02-02, 19:03
Posty: 33
Post 
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
Wyświetl profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w temacie   [ Posty: 8 ] 
   Podobne tematy   Autor   Odpowiedzi   Odsłony   Ostatni post 
Na tym forum nie ma nowych nieprzeczytanych postów. Eksport danych do txt lub połączenie ODBC

[ Przejdź na stronę: 1, 2 ]

w Programowanie

bzyq26

24

11393

2013-02-13, 09:42

bzyq26 Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Załączniki Pervasive problem z połączeniem Pervasive ODBC Client

w Programowanie

KrzysztofK

2

3364

2019-03-23, 22:41

Zenek N Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Symfonia Handel + ODBC + Pervasive + MYSQL

w Programy Handlowe

ml0dy

3

4738

2010-05-27, 22:52

wrob Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Załączniki Połączenie z bazą Pervasive zewnętrznie, przez inny program

w Programowanie

mrokaso

7

5343

2018-11-10, 10:23

mrokaso Wyświetl najnowszy post



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

Szukaj:
Przejdź do:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Support forum phpbb by phpBB Assistant