[ marko v @ 23.12.2005. 17:15 ] @
aplikacija bazirana na access bazi radi rezervacije apartmana.kako da prilikom update-a tj.stvaranja nove rezervacije ispitam dali je apartman u tom periodu(izmedju dva datuma) već zauzet?

[ Fedya @ 26.12.2005. 09:14 ] @
Napravis proceduru na bazi sa sledecim kodom
Code:

CREATE PROCEDURE UnesiRezervaciju
(
       @Pocetni DateTime,
       @Krajnji DateTime,
       @Uspelo bit output,
       --ostali parametri potrebni za unos apartmana u bazu
)
AS
IF NOT EXISTS (SELECT * FROM Apartmani WHERE IDApartmana BETWEEN @Pocetni AND @Krajnji)
BEGIN
     INSET INTO Apartmani VALUES (-- potrebni parametri)
     @Uspelo = 1
END
ELSE
     @Uspelo = 0


I pozoves proceduru iz koda ako vrati 0 znaci da je termin zauzet...
[ marko v @ 12.01.2006. 19:29 ] @
Trudio sam se sa procedurom i nije islo.Onda sam na stranici http://www.devcity.net/Articles/18/1/msaccess_sp.aspx
pronasao da MS Access bas ne radi dobro sa svim procedurama.
Kako bi se još moglo ovo rijesiti. Da li je moguce podatke tipa datetime potrpati u nekekvo polje i onda testirati da li je datum vec zauzet.kako bi to otprilike islo ako je moguce?
[ Fedya @ 16.01.2006. 14:33 ] @
Sorry, nisam primetio da je Access u pitanju.

Bez procedura teško da ćeš moći da proveriš vrednosti unesene direktno u tabelu. Verovatno će biti najbolje rešenje da ispravnost proveriš u klijentskoj aplikaciji.
Npr. odradiš query koji ti vraća rezervaciju datog apartmana u dato vreme pa ako vrati bilo šta znači da je termin zauzet i na klijentu ispisuješ poruku.

[Ovu poruku je menjao Fedya dana 16.01.2006. u 15:37 GMT+1]
[ vekica @ 16.01.2006. 23:28 ] @
u pravu je Fedya. Znaci pre ubacivanja prodješ kroz bazu i vidis da li postoji vec taj unos.

na kraju krajeva mozes vratiti podatke u DataSet i onda mozes proci kroz taj DataSet obicnom petljom videti da li ima mogucnosti da se ubace podatci i to ti je to.

znaci prvo proveris i onda pozoves update ili ako je rezervisan onda i ne zoves taj metod vec javis korsiniku da je zauzet
[ Fedya @ 17.01.2006. 07:20 ] @
Da, ok je to - mada je moja ideja više bila da pusti precizno definisan upit sa traženim podacima i da proveri sa IF EXISTS (verovatno postoji tako nešto u Access-u); time se minimizuje količina podataka koja putuje do klijenta i nema neke preterane obrade.
[ marko v @ 19.01.2006. 18:14 ] @
Evo rijesio sam stvar na nacin da sam stvorio jos jedan adapter koji puni jos jedan dataset.I iz tog seta saljem korisniku poruku o apartmanima koji su zauzeti u periodu u kojem on pokusava stvoriti novu rezervaciju.Najveca mana je to sto korisnik jos uvijek moze naparaviti rezervaciju iako je neki apartman u tom periodu vec zauzet.Dobiva upozorenje ali ga uvijek moze ignorirati.

Evo kod pa ako imate jos koju ideju sta bi se tu moglo napraviti.
Hvala unaprijed.I hvala za vec pruzenu pomoc.

richTextBox3.ResetText();

string RezervacijaSelect = "Select * from Rezervacija where ? between DatumDolaska and DatumOdlaska
or ? between DatumDolaska and DatumOdlaska
or DatumDolaska between ? and ?
or DatumOdlaska between ? and ?";

OleDbDataAdapter adapter = new OleDbDataAdapter(RezervacijaSelect, rezervacijaTableAdapter.Connection);

OleDbParameter paramDatum = new OleDbParameter();
paramDatum.OleDbType = OleDbType.Date;
paramDatum.ParameterName = "DatumNovi";
paramDatum.Value = dataGridView1.CurrentRow.Cells[3].Value;

OleDbParameter paramOdlaska = new OleDbParameter();
paramOdlaska.OleDbType = OleDbType.Date;
paramOdlaska.Value = dataGridView1.CurrentRow.Cells[4].Value;
paramOdlaska.ParameterName = "ParametarOdlaska";

OleDbParameter paramDatum1 = new OleDbParameter();
paramDatum1.OleDbType = OleDbType.Date;
paramDatum1.ParameterName = "DatumNovi1";
paramDatum1.Value = dataGridView1.CurrentRow.Cells[3].Value;

OleDbParameter paramOdlaska1 = new OleDbParameter();
paramOdlaska1.OleDbType = OleDbType.Date;
paramOdlaska1.Value = dataGridView1.CurrentRow.Cells[4].Value;
paramOdlaska1.ParameterName = "ParametarOdlaska1";

OleDbParameter paramDatum2 = new OleDbParameter();
paramDatum2.OleDbType = OleDbType.Date;
paramDatum2.ParameterName = "DatumNovi2";
paramDatum2.Value = dataGridView1.CurrentRow.Cells[3].Value;

OleDbParameter paramOdlaska2 = new OleDbParameter();
paramOdlaska2.OleDbType = OleDbType.Date;
paramOdlaska2.Value = dataGridView1.CurrentRow.Cells[4].Value;
paramOdlaska2.ParameterName = "ParametarOdlaska2";


adapter.SelectCommand.Parameters.Add(paramDatum);
adapter.SelectCommand.Parameters.Add(paramOdlaska);
adapter.SelectCommand.Parameters.Add(paramDatum1);
adapter.SelectCommand.Parameters.Add(paramOdlaska1);
adapter.SelectCommand.Parameters.Add(paramDatum2);
adapter.SelectCommand.Parameters.Add(paramOdlaska2);



DataSet setPomocni = new DataSet();
adapter.Fill(setPomocni);

BindingManagerBase bmb = BindingContext[setPomocni.Tables[0]];
bmb.Position = 0;

DataView dv = new DataView(setPomocni.Tables[0]);
int brojZauzetih = dv.Table.Rows.Count;

string[] apartmani1 = new string[brojZauzetih];
string[] apartmani2 = new string[brojZauzetih];
string[] apartmani3 = new string[brojZauzetih];

for (int i = 0; i < brojZauzetih; i++)
{
DataRowView drv = (DataRowView)bmb.Current;
DataRow dr = (DataRow)drv.Row;
apartmani1 = dr["BrojApartmana"].ToString();
apartmani2 = dr["DatumDolaska"].ToString();
apartmani3 = dr["DatumOdlaska"].ToString();
bmb.Position++;
}

if (brojZauzetih > 0)
{
richTextBox3.Visible = true;
richTextBox3.AppendText("Zauzeti su bili apartmani sa brojem: ");

richTextBox2.AppendText("U željenom periodu već su zauzeti apartmani pod rednim brojem: ");
richTextBox2.AppendText("\n");
richTextBox2.AppendText("\n");
for (int z = 0; z < brojZauzetih; z++)
{
richTextBox2.AppendText(apartmani1[z]);
richTextBox2.AppendText(" ");
richTextBox2.AppendText(apartmani2[z]);
richTextBox2.AppendText(" ");
richTextBox2.AppendText(apartmani3[z]);
richTextBox2.AppendText("\n");
richTextBox2.AppendText("\n");
richTextBox3.AppendText(apartmani1[z]);
richTextBox3.AppendText(" ");
}

}
else
{
richTextBox2.AppendText("U željenom periodu nema zauzetih apartmana!!");
}

DialogResult drez = MessageBox.Show("Da li želite nastaviti sa rezervacijom?\n " + richTextBox2.Text + "", "Potvrdi!!",
MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (drez == DialogResult.Yes)
{
rezervacijaTableAdapter.Update(apartmanosDataSet1.Rezervacija);
apartmanosDataSet1.Rezervacija.AcceptChanges();
richTextBox3.Visible = false;
}
richTextBox2.ResetText();
[ 01011011 @ 19.01.2006. 21:27 ] @
Ja obozavam procedure ali imam mali problemcic, otvoricu novi topik :)