no dokladnie nie musisz tego uzyc ale samo rozwiazanie i zapytania sa
wporzadku (choc wiem ze ALEC pewnie by je zoptymalizowal z dwa razy ;)), nie
za trudne nie za banalne ale spełnia swoją rolę,
Pozdrawiam
06-12-07, Rafał Suliga <r.suliga(a)fast-net.pl> napisał(a):
>
> Dzięki za pomoc, zawsze to jakiś początek i koncept na zrobienie
> tego w
> MySQL'u. Na szybko poradziłem sobie plikiem users w którym dodałem
> NAS-Port-Id == :).
>
> Pozdrawiam,
> Rafał S.
>
>
>
> _______________________________________________
> lms mailing list
> lms(a)lists.lms.org.pl
> http://lists.lms.org.pl/mailman/listinfo/lms
>
_______________________________________________
lms mailing list
lms(a)lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms
Dzięki za pomoc, zawsze to jakiś początek i koncept na zrobienie tego w
MySQL'u. Na szybko poradziłem sobie plikiem users w którym dodałem
NAS-Port-Id == :).
Pozdrawiam,
Rafał S.
_______________________________________________
lms mailing list
lms(a)lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms
kurde szukam i szukam, jest ktos kto moglby mnie naprowadzic na blad?
musze wydrukowac faktury a niestety nie mam jak przez te bledy :-)
dzieki wielkie.
--
Serdecznie pozdrawiam
Adam Machnik
email: machine(a)vf.pl
gg: 8300
tel: 512177660
On Mon, 3 Dec 2007, Dawid Widyna wrote:
> machine(a)vf.pl napisał(a):
>> DBD::mysql::st execute failed: Illegal mix of collations (latin2_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' at /bin/lms-payments line 414.
>> DBD::mysql::st execute failed: Illegal mix of collations (latin2_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' at /bin/lms-payments line 414.
>>
>
> Niestety nie znam się zbyt dobrze, ale jak na mój gust błąd mówi, że
> próbujesz porównywać 2 ciągi, z których każdy jest w innym kodowaniu.
>
> Może w tabeli z taryfami coś nie tak ? Sprawdź collations w mysql.
>
> pozdrawiam,
> widynek
>
> _______________________________________________
> lms mailing list
> lms(a)lists.lms.org.pl
> http://lists.lms.org.pl/mailman/listinfo/lms
>
_______________________________________________
lms mailing list
lms(a)lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms
Witam
Tu znów szpec od sql-a się odezwał :)
Poniższe zapytanko (standardzik):
SELECT customers.id AS id, UPPER( lastname ) AS lastname, name, SUM(
cash.value ) AS balance
>FROM customers
LEFT JOIN cash ON customers.id = cash.customerid
WHERE deleted =0
GROUP BY customers.id, lastname, name
ORDER BY balance
Zwraca mi listę ludzików wraz z ich zadłużeniem.
Dostaje kolumny id, Lastname, name i balance
A potrzebował bym do szczęścia dodatkowo (lub od biedy zawiast balance)
kolumnę z sumą ZOBOWIĄZAŃ gościa.
Idea jest taka, coby móc porównać jego łączne zobowiązania z łącznym
zadłużeniem :)
Gdzieś któryś z wydruków w lms-e daje taką funkcjonalność ale ja to
potrzebuję w skrypcie i nie mogę wyciągnąć zapytania ...
Pozdrawiam
Torin
_______________________________________________
lms mailing list
lms(a)lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms
Witam o to kod glownego programu:
program pppoe_ng;
uses
mysql4,mysqloi,crt,sysutils,strings,Variants,Classes,strutils;
const
dbhost : PChar='localhost';
dbuser : PChar='user';
dbpass : PChar='pass';
var
query_main,query_radcheck,query_radreply,modify : tsqlz;
t,y,x:integer;
name_lms,ip_lms,passwd_lms : string;
name_radius, passwd_radius, ip_radius : string;
// row : TMYSQL_ROW;
conn1 : PMYSQL;
conn2 : PMYSQL;
begin
clrscr;
conn1:=mysql_connect(dbhost,dbuser,dbpass);
mysql_query(conn1, 'set NAMES utf8');
query_main.sql:= 'Select id, LCASE(name), INET_NTOA(ipaddr), passwd from
lms.nodes where ownerid!=0';
query_main.sqlexec(conn1);
Writeln ('Przeładowanie modułu PPPoE:');
Writeln (' Zatwierdzanie zmian w ustawieniach PPPoE:');
x:=0;
for t:=1 to mysql_num_rows (query_main.dataset) do
begin
query_main.row := mysql_fetch_row(query_main.dataset);
name_lms:=string(query_main.row[1]);
ip_lms:=string(query_main.row[2]);
passwd_lms:=string(query_main.row[3]);
query_radcheck.sql:='select username, value from
radius.radcheckwhere username=:username;';
query_radcheck.parasstring(':username', name_lms+'@flynet.com.pl');
query_radcheck.sqlexec(conn1);
query_radcheck.row:=mysql_fetch_row(query_radcheck.dataset);
if (mysql_num_rows(query_radcheck.dataset) <> 0) then
begin
query_radreply.sql:='select value from radius.radreply where
attribute=:attribute AND username=:username;';
query_radreply.parasstring(':attribute', 'Framed-IP-Address');
query_radreply.parasstring(':username', name_lms+'@flynet.com.pl');
query_radreply.sqlexec(conn1);
query_radreply.row:=mysql_fetch_row(query_radreply.dataset);
ip_radius:=string(query_radreply.row[0]);
name_radius:=string(query_radcheck.row[0]);
passwd_radius:=string(query_radcheck.row[1]);
// writeln('haslo1 '+passwd_lms+' haslo2 '+passwd_radius+'
ip_radius: '+ip_radius);
if (passwd_lms = '') then
begin
x:=x+1;
modify.sql:='DELETE radius.radcheck, radius.5radreply FROM
radius.radcheck, radius.radreply WHERE
radius.radcheck.username=radius.radreply.username AND
radius.radcheck.username=:username;';
modify.parasstring(':username', name_lms+'@flynet.com.pl');
modify.sqlexec(conn1);
writeln(' *Wyłączam PPPoE dla urządzenia: '+name_lms);
end
else
begin
if (passwd_radius <> passwd_lms) then
begin
x:=x+1;
modify.sql:='UPDATE radius.radcheck SET value=:value WHERE
attribute=:attribute AND username=:username;';
modify.parasstring(':value', passwd_lms);
modify.parasstring(':attribute', 'Password');
modify.parasstring(':username', name_lms+'@flynet.com.pl');
modify.sqlexec(conn1);
writeln(' *Aktualizuję hasło dla urządzenia: '+name_lms);
end;
if (ip_lms <> ip_radius) then
begin
x:=x+1;
modify.sql:='UPDATE radius.radreply SET value=:value WHERE
attribute=:attribute AND username=:username;';
modify.parasstring(':value', ip_lms);
modify.parasstring(':attribute', 'Framed-IP-Address');
modify.parasstring(':username', name_lms+'@flynet.com.pl');
modify.sqlexec(conn1);
writeln(' *Aktualizuję adres ip dla urządzenia: '+name_lms);
end;
end;
end
else if (passwd_lms <> '') then
begin
modify.sql:='INSERT INTO radius.radcheck (username, attribute,
value) VALUES (:username, :attribute, :value);';
modify.parasstring(':username', name_lms+'@flynet.com.pl');
modify.parasstring(':attribute','Password');
modify.parasstring(':value', passwd_lms);
modify.sqlexec(conn1);
modify.sql:='INSERT INTO radius.radreply (username, attribute,
value) VALUES (:username, :attribute, :value);';
modify.parasstring(':username', name_lms+'@flynet.com.pl');
modify.parasstring(':attribute','Framed-IP-Address');
modify.parasstring(':value', ip_lms);
modify.sqlexec(conn1);
writeln(' *Włączam PPPoE dla urządzenia: '+name_lms);
x:=x+1
end;
end;
if (x = 0) then writeln(' Nie było żadnych zmian do zatwierdzenia!')
else
begin
write('Dokonano ');
write(x);
writeln(' zmian(y) w ustawieniach PPPoE');
end;
query_main.free;
query_radcheck.free;
query_radreply.free;
query_main.sql:='select username from radius.radcheck;';
query_main.sqlexec(conn1);
writeln(' Czyszczę PPPoE ze starych nazw:');
x:=0;
for t:=1 to mysql_num_rows(query_main.dataset) do
begin
query_main.row:=mysql_fetch_row(query_main.dataset);
name_radius:=string(query_main.row[0]);
delete(name_radius,length(name_radius)-13,14);
query_radcheck.sql:='select name from lms.nodes where name=:username;';
query_radcheck.parasstring(':username', name_radius);
query_radcheck.sqlexec(conn1);
if (mysql_num_rows(query_radcheck.dataset) = 0) then
begin
modify.sql:='DELETE radius.radcheck, radius.radreply FROM
radius.radcheck, radius.radreply WHERE
radius.radcheck.username=radius.radreply.username AND
radius.radcheck.username=:username;';
modify.parasstring(':username', name_radius+'@flynet.com.pl');
modify.sqlexec(conn1);
writeln(' *'+name_radius+'@flynet.com.pl');
x:=x+1;
end;
end;
if (x = 0) then writeln(' Nie było nic do czyszczenia!')
else
begin
write('Wyczyszczono ');
write(x);
writeln(' rekord(ów)');
end;
mysql_close(conn1);
writeln ('Przeładowanie modułu PPPoE zakończone sukcesem!');
halt(0);
end.
-----------------------------------------------------------------------------------------------------------------
o to kod unitu mysqloi:
UNIT MYSQLOI;
INTERFACE
USES
MYSQL4,CRT,SYSUTILS,STRINGS,VARIANTS,CLASSES,STRUTILS;
TYPE
TSQLZ = OBJECT
SQL:ANSISTRING;
PSQL:PCHAR;
ROW:TMYSQL_ROW;
DATASET : PMYSQL_RES;
PROCEDURE PARASSTRING(PAR:STRING;VALUE:VARIANT);
PROCEDURE PARASNUMERIC(PAR:STRING;VALUE:VARIANT);
PROCEDURE PARASDATE(PAR:STRING;VALUE:VARIANT);
PROCEDURE SQLEXEC(CONN:PMYSQL);
PROCEDURE UPDATE;
PROCEDURE FREE;
END;
FUNCTION MYSQL_CONNECT(HOST:PCHAR;USER:PCHAR;PASS:PCHAR):PMYSQL;
VAR
// SOCK : PMYSQL;
// ROW : TMYSQL_ROW;
// Y : INTEGER;
QMYSQL : TMYSQL;
IMPLEMENTATION
PROCEDURE TSQLZ.FREE;
BEGIN
MYSQL_FREE_RESULT(DATASET);
END;
PROCEDURE TSQLZ.SQLEXEC(CONN:PMYSQL);
BEGIN
UPDATE;
IF (MYSQL_QUERY(CONN,PSQL) < 0) THEN
BEGIN
WRITELN (STDERR,'QUERY FAILED ');
WRITELN (STDERR,MYSQL_ERROR(CONN));
HALT(1);
END;
DATASET := MYSQL_STORE_RESULT(CONN);
// IF (DATASET = NIL) THEN
// BEGIN
// WRITELN (STDERR,'QUERY FAILED ');
// WRITELN (STDERR,MYSQL_ERROR(CONN));
// MYSQL_CLOSE(CONN);
// HALT (1);
// END;
//IF (SWITCH = 1) THEN
//BEGIN
// DATASET:=MYSQL_STORE_RESULT(BAZA);
//END;
//IF (SWITCH = 2) THEN
//BEGIN
// DATASET:=MYSQL_STORE_RESULT(BAZA);
// IF (MYSQL_NUM_ROWS(DATASET) > 0) THEN
// BEGIN
// FOR Y:=1 TO MYSQL_NUM_ROWS(DATASET) DO
// BEGIN
// ROW:=MYSQL_FETCH_ROW(DATASET);
// WRITELN(ROW[1]);
// END;
// END;
//END;
//MYSQL_QUERY(BAZA,PSQL);
END;
PROCEDURE TSQLZ.UPDATE;
BEGIN
psql:=stralloc(length(sql)+1);
psql:=strpcopy(psql,sql);
end;
procedure tsqlz.parasstring(par:string;value:variant);
begin
sql:=ansireplacetext(sql,par,#39+value+#39);
update;
end;
procedure tsqlz.parasnumeric(par:string;value:variant);
begin
sql:=ansireplacetext(sql,par,value);
update;
end;
procedure tsqlz.parasdate(par:string;value:variant);
begin
sql:=ansireplacetext(sql,par,value);
update;
end;
function mysql_connect(host:PChar;user:PChar;pass:PChar):PMYSQL;
var
sock, sock_back : PMYSQL;
back_host, back_user, back_pass : PChar;
// qmysql : TMYSQL;
begin
back_host:='localhost';
back_user:='root';
back_pass:='abimbu6';
mysql_init(PMySQL(@qmysql));
sock:=mysql_real_connect(PMysql(@qmysql),host,user,pass,nil,0,nil,0);
if (sock = Nil) then
begin
Writeln (stderr,'Couldn''t connect to MySQL.');
Writeln (stderr,mysql_error(@qmysql));
//
sock_back:=mysql_real_connect(PMysql(@qmysql),back_host,back_user,back_pass,nil,0,nil,0);
end;
mysql_connect:=sock;
end;
end.
Pamiętaj o z linkowaniu libmysqlclient. Wiem ze program moze troche
przerazac ale ja nie pisze w pascalu zawodowo musialem przepisac po prostu
skrypt do jakioegos normalnego jezyka co sie bedzie normalnie wykonywal,bo
to samo w bashu hmmm wykonywalo sie jakies 4 sekundy... Mam gotowe binarki
ale jak widac haslo i user do bazy sa zapisane w kodzie zrodlowym wiec
lepiej abys sam opanowal kompilacje :). sorry za caloksztalt ale nie pisalem
tego z mysla zeby to komu kolwiek udostępnić.
Pozdrawiam
05-12-07, malpi <malpi(a)o2.pl> napisał(a):
>
>
> Dnia 5 grudnia 2007 9:47 Rafał Suliga <r.suliga(a)fast-net.pl> napisał(a):
>
> > OK, to jak możesz to podeślij będę bardzo wdzięczny :).
> >
> > Pozdrawiam, i dzięki za pomoc.
> >
>
> sql.conf nic Ci nie da, bo nie jest zmieniony. Ja u siebie realizuję to
> przez funkcję plpsql (mam bazę postgresa)
>
> Generalnie nie daje gotowych rozwiązań, bo to już wdrożenie (czytaj usługa
> płatna).
>
> Pozdrawiam
>
>
> _______________________________________________
> lms mailing list
> lms(a)lists.lms.org.pl
> http://lists.lms.org.pl/mailman/listinfo/lms
>
_______________________________________________
lms mailing list
lms(a)lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms
witam , mam podobny priblem , ale za cholere nie moge sobie z tym poradzić ,
możesz powiedzieć co konkretnie zrobiłeś że normalnie Ci sie wyswietlają
literki ?
_______________________________________________
lms mailing list
lms(a)lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms
Dnia 5 grudnia 2007 9:47 Rafał Suliga <r.suliga(a)fast-net.pl> napisał(a):
> OK, to jak możesz to podeślij będę bardzo wdzięczny :).
>
> Pozdrawiam, i dzięki za pomoc.
>
sql.conf nic Ci nie da, bo nie jest zmieniony. Ja u siebie realizuję to przez funkcję plpsql (mam bazę postgresa)
Generalnie nie daje gotowych rozwiązań, bo to już wdrożenie (czytaj usługa płatna).
Pozdrawiam
_______________________________________________
lms mailing list
lms(a)lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms
OK.
Dnia 05-12-2007, Śr o godzinie 09:53 +0100, Michał Gacek pisze:
> kurcze nie moge go znaleźć moge ci dać zródełka lub binarke do
> programu w freepascalu
>
> Pozdrawiam
>
> 05-12-07, Rafał Suliga <r.suliga(a)fast-net.pl> napisał(a):
> OK, to jak możesz to podeślij będę bardzo wdzięczny :).
>
> Pozdrawiam, i dzięki za pomoc.
>
> Rafał S.
>
> Dnia 05-12-2007, Śr o godzinie 09:07 +0100, Michał Gacek
> pisze:
> > no mozesz zmienic zapytania sqlowe w sql conf ale ja bym
> tego nie
> > robil bo mozesz sobie spierpzyc baze czy cos, no chyba ze
> jestes
> > obcykany w mysql, ja znam tylko podstawy wiec wolalem zrobic
> to na
> > zasadzie porownania 2 baz radiusowej z lmsowska. Jak chcesz
> to gdzies
> > mam skrypcik w bashu do tego, bo obecnie uzywam do tego
> programu w
> > delphi bodajze.
> >
> > Pozdrawiam
> > Michal
> >
> > 04-12-07, r.suliga(a)fast-net.pl <r.suliga(a)fast-net.pl >
> napisał(a):
> > >
> > >
> > >
> > > Dnia 4 grudnia 2007 22:12 r.suliga(a)fast-net.pl
> napisał(a):
> > >
> > >> Witam, gdzieś na liście czytałem kiedyś o
> autoryzacji
> > klientów przez
> > >> FreeRadiusa. MT autoryzuje bez problemu, ale no
> właśnie
> > jest ale w jaki
> > >> sposób można sobie poradzić z pppoe w tym
> momencie? a
> > mianowicie chodzi
> > >> mi
> > >> o to że po autoryzacji jeden klient może się
> połączyć z
> > jednym z dwóch
> > >> sektorów i zalogować przez pppoe. Efekt jest taki
> że 3/4
> > ludzi siedzi na
> > >> jednym sektorze a 1/4 na drugim. Jak zrobić żeby
> uniknąć
> > takiej
> > >> sytuacji,
> > >> zmusić MT żeby autoryzował użytkownika na
> konkretnej
> > antenie i pozwalał
> > >> tylko na niej zalogować się przez PPPoE?
> > >>
> > >> Z góry dzięki za odp.
> > >>
> > >> Pozdrawiam,
> > >> Rafał S.
> > >>
> > > Najprościej jest zezwalać konkretnemu mac-adresowi
> klienta
> > bezprzewodowego
> > > podłączać się tylko do określonego ssid'a (a
> ściślej do
> > nazwy interfejsu
> > > wlan na MT, którego można dla uproszczenia nazwać
> tak samo
> > jak ssid).
> >
> > No takie mam zamierzenie, tylko nie wiem jak
> zrobić ;). Z
> > poziomu MT
> > raczej nie widzę takiej możliwości. Z tego co
> piszesz
> > wnioskuję, że będę
> > musiał odpowiednio sformułować zapytanie do MySQL'a
> żeby to
> > zrobić.
> >
> > > Możnaby też pokombinować coś z nazwą service, do
> którego się
> > wdzwania
> > > klient, ale to może na MT nie działać.
> > > Jeśli masz LMS, to najlepiej będzie skonfigurować
> radius'a
> > tak, aby
> > > pobierał dane "na żywo" z bazy LMS. Generalnie jak
> się to
> > mądrze zrobi to
> > > można dopisywać sprzęt/zmieniać nadajnik pod który
> klient
> > jest podpięty,
> > > bez konieczności przeładowywania czegokolwiek.
> Łącznie z
> > dodawaniem taryf
> > > :)
> >
> > Tak, mam LMS'a wersja 1.10.0 Urgo
> >
> > Czy mogę liczyć na jakąś małą podpowiedź? choćby
> mały wycinek
> > sugerujący
> > tok myślenia ;) z sql.conf?
> >
> > Pozdrawiam,
> > Rafał S.
> >
> > >
> > > Pozdrawiam - Paweł Barczyk
> > >
> >
> > > _______________________________________________
> > > lms mailing list
> > > lms(a)lists.lms.org.pl
> > > http://lists.lms.org.pl/mailman/listinfo/lms
> > >
> >
> >
> >
> > _______________________________________________
> > lms mailing list
> > lms(a)lists.lms.org.pl
> > http://lists.lms.org.pl/mailman/listinfo/lms
> >
> > _______________________________________________
> > lms mailing list
> > lms(a)lists.lms.org.pl
> > http://lists.lms.org.pl/mailman/listinfo/lms
> --
> Rafał Suliga
>
> Fast-net s.c.
> Bezprzewodowy dostęp do internetu
> ul. Kościelna 14, 27-400 Ostrowiec Św.
> tel/fax. +48 (41) 247 68 88
> tel. kom. +48 500 108 955
>
> Internet: http://www.fast-net.pl
>
>
> _______________________________________________
> lms mailing list
> lms(a)lists.lms.org.pl
> http://lists.lms.org.pl/mailman/listinfo/lms
>
> _______________________________________________
> lms mailing list
> lms(a)lists.lms.org.pl
> http://lists.lms.org.pl/mailman/listinfo/lms
--
Rafał Suliga
Fast-net s.c.
Bezprzewodowy dostęp do internetu
ul. Kościelna 14, 27-400 Ostrowiec Św.
tel/fax. +48 (41) 247 68 88
tel. kom. +48 500 108 955
Internet: http://www.fast-net.pl
_______________________________________________
lms mailing list
lms(a)lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms
Michał Gacek napisał(a):
> No z taka baza to mozesz kolego zapomnieć o pod zapytaniach
> Pozdrawiam
> Michał
>
> 04-12-07, *A.L.E.C* <alec(a)alec.pl <mailto:alec@alec.pl> > napisał(a):
>
> Zbyszek Rybarczyk wrote:
> > Wyszło mi z tego takie zapytanie :
> > SELECT inet_ntoa(ipaddr) AS ip FROM nodes WHERE ownerid IN (SELECT
> > customers.id <http://customers.id> FROM customers LEFT JOIN cash
> ON customers.id <http://customers.id> =
> > cash.customerid WHERE deleted = 0 GROUP BY customers.id
> <http://customers.id>, lastname, name
> > HAVING SUM(cash.value) < -90);
> >
> > I niestety kupa :(
> >
> > ERROR 1064: Something is wrong in your syntax obok 'SELECT
> customers.id <http://customers.id>
> > FROM customers LEFT JOIN cash ON customers.i' w linii 1
> >
> Możliwe że mysql tego nie łyka, jaka wersja? Możesz zrobić jeszcze
> inaczej, wejdź na Komputery -> Raporty, tam jest checkbox 'zadłużony
> właściciel', zobacz jakie zapytanie generuje (modules/nodeprint.php).
>
Dzięki wszystkim za pomoc - szczególnie A.L.E.C-owi :)
Baza nie ma podzapytań wiec rozbiłem to na dwa zapytania i śmiga aż miło :D
Torin
_______________________________________________
lms mailing list
lms(a)lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms