Strona główna » Carckowanie » lang csharp » sprawdzanie zakresu danych - wielka prosba o pomoc
sprawdzanie zakresu danych - wielka prosba o pomoc [wiadomość #742] sob, 07 lipiec 2007 14:28 Przejdź do następnej wiadomości
sg_pl jest aktualnie niedostępny sg_pl
Wiadomości: 24
Dołączył(a): maj 2007
Junior Member
Witam ponownie dzisiaj i prosze o porade, mam do zrobienia taka rzecz, otoz
w bazie mam 3 pola (seria, od, do) i formularz w ktorym dodaje np. AA,10,20.
Moga sie zdarzyć dziury w numerach czyli przyjmijmy ze mam zapisane w bazie
AA,10,20
AA,21,30
AA,50,60

musze napisac funkcje, ktora sprawdzi przed zapisem czy liczba w polu od
albo w polu do nie jest juz przypadkiem zapisana w jakims zakresie wczesniej
dodanym. Walcze i walcze i wywalczylem ze jak wpisze np AA,22,32 to nie
pozwala na zapis, jak dam AA,40,60 to tez jest ok ale jak juz dam AA,40,65
to mi zapisuje i sie nie czepia, a powinien bo jest tu zawarty zakres od
50-60. Jak sie robi takie rzeczy?

Zamieszczam ponizej kod ale prosze sie nie przerazac bo jest toistne
rzezbiarstwo, po sprawdzeniu czy seria jest nastepuje zapis jezeli takiej
jeszcze w bazie nie ma ale jezeli jest juz taka w bazie to przechodze do
sprawdzenia zakresow i to juz masakra, po pierwsze nie dziala toco opisalem
powyzej, a po drugie nie wiem gdzie wstawic zapis jak juz sie okaze ze
takiego zakresu tam nie ma.

Dzieki za pomoc

Sebastian

public static int ilosc = 0;
public static int ilosc2 = 0;
private void SPRAWDZENIE()
{
OleDbConnection sprbloczekcon = new OleDbConnection();
sprbloczekcon.ConnectionString = Dane.bazadanych.polozeniebazy;
OleDbCommand sprbloczekcmd = new OleDbCommand();
sprbloczekcmd.CommandText = "SELECT count(*) From bloczki where
seria='" + danebloczka.seria + "'";
try
{
sprbloczekcmd.Connection = sprbloczekcon;
sprbloczekcon.Open();

string liczba = sprbloczekcmd.ExecuteScalar().ToString();
ilosc = Int32.Parse(liczba.ToString());
ilosc2 = ilosc;

if (ilosc > 0)
{
int j = 0;
for (j = 0; ilosc > j; j++)
{
SPRAWDZENIE2();
ilosc2 = ilosc2 - 1;
}
}
else
{
ZAPIS();
}
}
catch
{
MessageBox.Show("Wystąpił błąd podczas sprawdzania danych
dot. bloczków.\nSkontaktuj się z producentem oprogramowania.", "Błąd
sprawdzania danych - bloczek", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (sprbloczekcon.State == ConnectionState.Open)
{
sprbloczekcon.Close();
}
}
}
private void SPRAWDZENIE2()
{
int bloczek_od = 0;
int bloczek_do = 0;
int id = 0;
OleDbConnection sprbloczekcon2 = new OleDbConnection();
sprbloczekcon2.ConnectionString = Dane.bazadanych.polozeniebazy;
OleDbCommand sprbloczekcmd2 = new OleDbCommand();
sprbloczekcmd2.CommandText = "Select top "+ilosc2+" * from
bloczki where seria='" + danebloczka.seria + "'";
try
{
sprbloczekcmd2.Connection = sprbloczekcon2;
sprbloczekcon2.Open();
OleDbDataReader sprbloczek2 =
sprbloczekcmd2.ExecuteReader();
while (sprbloczek2.Read())
{
id = (int)sprbloczek2["id"];
bloczek_od = (int)sprbloczek2["od"] - 1;
bloczek_do = (int)sprbloczek2["do"] - 1;
}

int wartosc = bloczek_do - bloczek_od;

int j = 0;

for (j = 0; wartosc >= j; j++)
{
bloczek_od = bloczek_od + 1;
if (bloczek_od == danebloczka.bloczek_od)
{
wartosc = 0;
MessageBox.Show("ID: " + id.ToString() + ", NR:" +
bloczek_od.ToString() + "");
}
else if (bloczek_do == danebloczka.bloczek_od)
{
wartosc = 0;
MessageBox.Show("ID: " + id.ToString() + ", NR:" +
bloczek_od.ToString() + "");
}
else if (bloczek_od == danebloczka.bloczek_do)
{
wartosc = 0;
MessageBox.Show("ID: " + id.ToString() + ", NR:" +
bloczek_od.ToString() + "");
}
else if (bloczek_do == danebloczka.bloczek_do)
{
wartosc = 0;
MessageBox.Show("ID: " + id.ToString() + ", NR:" +
bloczek_od.ToString() + "");
}
}
}
Re: sprawdzanie zakresu danych - wielka prosba o pomoc [wiadomość #745 (odpowiedź na #742) ] sob, 07 lipiec 2007 17:22 Przejdź do poprzedniej wiadomościPrzejdź do następnej wiadomości
Tomasz Muszyński jest aktualnie niedostępny Tomasz Muszyński
Wiadomości: 17
Dołączył(a): kwiecień 2007
Junior Member
sg_pl pisze:
> Witam ponownie dzisiaj i prosze o porade, mam do zrobienia taka rzecz, otoz
> w bazie mam 3 pola (seria, od, do) i formularz w ktorym dodaje np. AA,10,20.
> Moga sie zdarzyć dziury w numerach czyli przyjmijmy ze mam zapisane w bazie
> AA,10,20
> AA,21,30
> AA,50,60
>
> musze napisac funkcje, ktora sprawdzi przed zapisem czy liczba w polu od
> albo w polu do nie jest juz przypadkiem zapisana w jakims zakresie wczesniej
> dodanym. Walcze i walcze i wywalczylem ze jak wpisze np AA,22,32 to nie
> pozwala na zapis, jak dam AA,40,60 to tez jest ok ale jak juz dam AA,40,65
> to mi zapisuje i sie nie czepia, a powinien bo jest tu zawarty zakres od
> 50-60. Jak sie robi takie rzeczy?

Robi się to prostym zapytaniem. Pobranie całej tabeli do pamięci i
przeszukiwanie jej to kiepski pomysł. Możesz tam przecież mieć milion
rekordów... i co wtedy?
Wynik zapytania to bloczki z którymi jest konflikt.

SELECT * FROM bloczki
WHERE seria=@seria
AND ((@start BETWEEN od AND do)
OR (@end BETWEEN od AND do)
OR (@start < od AND @end > do))

> Zamieszczam ponizej kod ale prosze sie nie przerazac bo jest toistne
> rzezbiarstwo, po sprawdzeniu czy seria jest nastepuje zapis jezeli takiej
> jeszcze w bazie nie ma ale jezeli jest juz taka w bazie to przechodze do
> sprawdzenia zakresow i to juz masakra, po pierwsze nie dziala toco opisalem
> powyzej, a po drugie nie wiem gdzie wstawic zapis jak juz sie okaze ze
> takiego zakresu tam nie ma.

Faktycznie rzeźba i do niczego do się nie nadaje ;) Używaj
OleDbParameter zamiast wklejania parametrów bezpośrednio w SQL.

Napisałeś też coś takiego:
> string liczba = sprbloczekcmd.ExecuteScalar().ToString();
> ilosc = Int32.Parse(liczba.ToString());

Przecież ExecuteScalar() powinno zwrócić Ci już int a nie string. Po co
więc robisz konwersję z object (w środku jest int) na string i to
ponownie na int? Wystarczyło tak:

int liczba = (int) sprbloczekcmd.ExecuteScalar();

tm

PS: działania zapytania nie sprawdzałem, ale na oko jest ok :)
Re: sprawdzanie zakresu danych - wielka prosba o pomoc [wiadomość #746 (odpowiedź na #742) ] sob, 07 lipiec 2007 17:33 Przejdź do poprzedniej wiadomościPrzejdź do następnej wiadomości
Yamma jest aktualnie niedostępny Yamma
Wiadomości: 14
Dołączył(a): maj 2007
Junior Member
Użytkownik "sg_pl" <sg_pl@poczta.onet.pl> napisał w wiadomości
news:f6om1a$io3$1@news.onet.pl...
> Witam ponownie dzisiaj i prosze o porade, mam do zrobienia taka rzecz,
> otoz w bazie mam 3 pola (seria, od, do) i formularz w ktorym dodaje np.
> AA,10,20. Moga sie zdarzyć dziury w numerach czyli przyjmijmy ze mam
> zapisane w bazie
> AA,10,20
> AA,21,30
> AA,50,60
>
> musze napisac funkcje, ktora sprawdzi przed zapisem czy liczba w polu od
> albo w polu do nie jest juz przypadkiem zapisana w jakims zakresie
> wczesniej dodanym.

Taką funkcję, aż się prosi aby napisać jako procedurę po stronie bazy
danych, więc właściwie jest NTG. Ale niech ci będzie:

select count(*) from jakas_tabela where od between zakres_dolny and
zakres_gorny or do between zakres_dolny and zakres_gorny

Jak zwróci zero, to można wstawiać.
yamma
Re: sprawdzanie zakresu danych - wielka prosba o pomoc [wiadomość #747 (odpowiedź na #745) ] sob, 07 lipiec 2007 17:44 Przejdź do poprzedniej wiadomościPrzejdź do następnej wiadomości
sg_pl jest aktualnie niedostępny sg_pl
Wiadomości: 24
Dołączył(a): maj 2007
Junior Member
Użytkownik "Tomasz Muszyński" <thom_ek@op.pl_nospam> napisał w wiadomości
news:f6p07q$u1$1@atlantis.news.tpi.pl...
> sg_pl pisze:
>> Witam ponownie dzisiaj i prosze o porade, mam do zrobienia taka rzecz,
>> otoz w bazie mam 3 pola (seria, od, do) i formularz w ktorym dodaje np.
>> AA,10,20. Moga sie zdarzyć dziury w numerach czyli przyjmijmy ze mam
>> zapisane w bazie
>> AA,10,20
>> AA,21,30
>> AA,50,60
>>
>> musze napisac funkcje, ktora sprawdzi przed zapisem czy liczba w polu od
>> albo w polu do nie jest juz przypadkiem zapisana w jakims zakresie
>> wczesniej dodanym. Walcze i walcze i wywalczylem ze jak wpisze np
>> AA,22,32 to nie pozwala na zapis, jak dam AA,40,60 to tez jest ok ale jak
>> juz dam AA,40,65 to mi zapisuje i sie nie czepia, a powinien bo jest tu
>> zawarty zakres od 50-60. Jak sie robi takie rzeczy?
>
> Robi się to prostym zapytaniem. Pobranie całej tabeli do pamięci i
> przeszukiwanie jej to kiepski pomysł. Możesz tam przecież mieć milion
> rekordów... i co wtedy?
> Wynik zapytania to bloczki z którymi jest konflikt.
>
> SELECT * FROM bloczki
> WHERE seria=@seria
> AND ((@start BETWEEN od AND do)
> OR (@end BETWEEN od AND do)
> OR (@start < od AND @end > do))
>
>> Zamieszczam ponizej kod ale prosze sie nie przerazac bo jest toistne
>> rzezbiarstwo, po sprawdzeniu czy seria jest nastepuje zapis jezeli takiej
>> jeszcze w bazie nie ma ale jezeli jest juz taka w bazie to przechodze do
>> sprawdzenia zakresow i to juz masakra, po pierwsze nie dziala toco
>> opisalem powyzej, a po drugie nie wiem gdzie wstawic zapis jak juz sie
>> okaze ze takiego zakresu tam nie ma.
>
> Faktycznie rzeźba i do niczego do się nie nadaje ;) Używaj OleDbParameter
> zamiast wklejania parametrów bezpośrednio w SQL.
>
> Napisałeś też coś takiego:
> > string liczba = sprbloczekcmd.ExecuteScalar().ToString();
> > ilosc = Int32.Parse(liczba.ToString());
>
> Przecież ExecuteScalar() powinno zwrócić Ci już int a nie string. Po co
> więc robisz konwersję z object (w środku jest int) na string i to ponownie
> na int? Wystarczyło tak:
>
> int liczba = (int) sprbloczekcmd.ExecuteScalar();
>
> tm
>
> PS: działania zapytania nie sprawdzałem, ale na oko jest ok :)

Wielkie dzięki, tyle się z tym meczylem a to takie proste - matko. Jeszcze
raz dziekuje za pomoc.

Sebastian
Re: sprawdzanie zakresu danych - wielka prosba o pomoc [wiadomość #748 (odpowiedź na #746) ] sob, 07 lipiec 2007 19:20 Przejdź do poprzedniej wiadomości
Tomasz Muszyński jest aktualnie niedostępny Tomasz Muszyński
Wiadomości: 17
Dołączył(a): kwiecień 2007
Junior Member
Yamma pisze:
> Taką funkcję, aż się prosi aby napisać jako procedurę po stronie bazy
> danych, więc właściwie jest NTG. Ale niech ci będzie:
>
> select count(*) from jakas_tabela where od between zakres_dolny and
> zakres_gorny or do between zakres_dolny and zakres_gorny
>
> Jak zwróci zero, to można wstawiać.

Nie można. Brakuje trzeciego warunku... ;)

tm
Poprzedni wątek:Problem z File.Delete()
Następny wątek:[asp.net 2.0] przekazanie biezacej nazwy zalogowanego usera do gridview
Idź do forum:
  


Aktualna data: sob lut 11 05:58:51 EST 2012

Łączny czas generowania strony wyniósł 0,04909 sekund.
.:: Kontakt :: 901 906 niezarejestrowana strona brak hosta brak hosta system wymiany linkow Strona główna ::.

Powered by: FUDforum 2.7.6.
Copyright ©2001-2006 FUD Forum Bulletin Board Software