[ Platinum VN @ 08.10.2003. 14:02 ] @
Zdravo.

Pocetnik sam u vb programiranju. Radim vezbe iz knjige "Od pocetka... Visual Basic .NET". Zaglavio sam kod 16 Proramiranje SQL servera u ADO.NET. Ne mogu da zavrsim vezbu iz knjige. Hteo bi da napravim sopstvenu baze podataka. Greska se javlja kod Add dugmeta za dodavanje novog zapisa u tabelu. Greske koje se javljaju u tom delu su :
Line 1 : Incorrect syntax near ‘Parameter1’
Line 1 : Incorrect syntax near ‘?’
Line 1 : Incorrect syntax near ‘?’

Da li zna neko gde su greske?
Da dodam:
'Parametar za klonu title_ID...
...
Se pojavljuje 2 puta u kodu.
I ...Item(0)...
II...Item(4)...
Da li to tako mora?
Kao malo objasnjenje povucene su 2 tabele "titles" i "authors" koje su vezane za 3. "titleauthor" iz SQL pub datoteke.
Mozete da odgovorite i jednostavnije jer meni treba dodavanje zapisa u samo jednu tabelu (u mojoj bazi). Ali ako neko zna kako da resim ovaj primer nebi bilo lose da mi objasni radi kasnjeg prosirivanja.
Hvala u napred I evo koda:
Code:

Private Sub btnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNew.Click
        'Ponistite Ime1, Ime2 i Ime3 polja...
        txtBooktitle.Text = ""
        txtPrice.Text = ""
    End Sub

Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        Dim intPosition As Integer, intMaxID As Integer
        Dim strID As String
        Dim objCommand As SqlCommand = New SqlCommand()

        'Sacuvajte trenutni polozaj zapisa...
        intPosition = objCurrencyManager.Position

        'Inicijalizujte novi primerak objekta DataSet...
        objDataSet = New DataSet()

        'Otvorite vezu sa bazom podataka...
        objConnection.Open()

        'Otvorite vezu sa bazom podataka...
        objDataAdapter = New SqlDataAdapter( _
        "SELECT MAX(title_id) AS MaxID " & _
        "FROM titles WHERE title_id LIKE 'DM%'", objConnection)

        'Popunite podacima onjekat DataSet...
        objDataAdapter.Fill(objDataSet, "titles")

        'Ako je kolona MaxID jednaka nuli...
        If objDataSet.Tables("titles").Rows(0).Item("MaxID") Is _
        System.DBNull.Value Then
            'Podesite podrazumevanu vrednost na 1000...
            intMaxID = 1000
        Else
            'U suprotnom , podesite promenljivu strID na vrednost MAXID...
            strID = CStr(objDataSet.Tables("titles").Rows(0).Item("MaxID"))
            'Uzmite vrednost celog broja iz niza...
            intMaxID = CInt(strID.Remove(0, 2))
            'Povecajte vrednost...
            intMaxID += 1
        End If

        'Na kraju, podesite novi ID...
        strID = "DM" & intMaxID

        'Podesite osobine objekata SQLCommand...
        objCommand.Connection = objConnection
        objCommand.CommandText = "INSERT INTO titles" & _
        "(title_id, title, type, price, pubdate) " & _
        "VALUES(?,?, 'Demo',?, '" & "'); " & _
        "INSERT INTO titleauthor (au_id, title_id) VALUES (?,?)"
        objCommand.CommandType = CommandType.Text

        'Dodajte parametre za cuvare mesta u iskazu SQL, u
        'osobini CommnadText...

        'Parametar za klonu title_ID...
        objCommand.Parameters.Add(New SqlParameter())
        objCommand.Parameters.Item(0).Direction = ParameterDirection.Input
        objCommand.Parameters.Item(0).DbType = DbType.String
        objCommand.Parameters.Item(0).Size = 6
        objCommand.Parameters.Item(0).Value = strID

        'Parametar za klonu sa naslovom...
        objCommand.Parameters.Add(New SqlParameter())
        objCommand.Parameters.Item(1).Direction = ParameterDirection.Input
        objCommand.Parameters.Item(1).DbType = DbType.String
        objCommand.Parameters.Item(1).Size = 80
        objCommand.Parameters.Item(1).Value = txtBooktitle.Text

        'Parametar za klonu sa cenom...
        objCommand.Parameters.Add(New SqlParameter())
        objCommand.Parameters.Item(2).Direction = ParameterDirection.Input
        objCommand.Parameters.Item(2).DbType = DbType.Currency
        objCommand.Parameters.Item(2).Size = 8
        objCommand.Parameters.Item(2).Value = txtPrice.Text

        'Parametar za klonu au_ID...
        objCommand.Parameters.Add(New SqlParameter())
        objCommand.Parameters.Item(3).Direction = ParameterDirection.Input
        objCommand.Parameters.Item(3).DbType = DbType.String
        objCommand.Parameters.Item(3).Size = 11
        objCommand.Parameters.Item(3).Value = txtAuthorID.Text

        'Parametar za klonu title_ID...
        objCommand.Parameters.Add(New SqlParameter())
        objCommand.Parameters.Item(4).Direction = ParameterDirection.Input
        objCommand.Parameters.Item(4).DbType = DbType.String
        objCommand.Parameters.Item(4).Size = 6
        objCommand.Parameters.Item(4).Value = strID

        'Izvrsite objekat SQLCommand da bi ste umetnuli nove podatke...
        Try
            objCommand.ExecuteNonQuery()
        Catch err As SqlException
            MessageBox.Show(err.Message)
        End Try

        'Zatvorite vezu...
        objConnection.Close()

        'Popunite skup podataka i povezite polja...
        FillDataSetAndView()
        BindFields()

        'podesite polozaj zapisa na onaj koji je sacuvan...
        objCurrencyManager.Position = intPosition
        'Pokazite trenutni polozaj zapisa...
        ShowPosition()

        'Prikazite poruku u kojoj se vidi da je zapis dodat....
        StatusBar1.Text = "Record Added"

        'Ponistite...
        objDataSet = Nothing
        objDataAdapter = Nothing
        objCommand = Nothing
    End Sub
[ dotnet @ 08.10.2003. 16:52 ] @
Pozdrav

Greska se javlja zato sto za parametre u SqlCommand koristis '?' . SqlCommand za razliku od OleDbCommand koristi Named parametre. Tako da kad bi koristio OleDbCommand primer bi prosao bez problema. Da bi ovaj primer proradio zameni sledeci kod:
Code:
 'Parametar za klonu title_ID...
        objCommand.Parameters.Add(New SqlParameter())
        objCommand.Parameters.Item(0).Direction = ParameterDirection.Input
        objCommand.Parameters.Item(0).DbType = DbType.String
        objCommand.Parameters.Item(0).Size = 6
        objCommand.Parameters.Item(0).Value = strID

        'Parametar za klonu sa naslovom...
        objCommand.Parameters.Add(New SqlParameter())
        objCommand.Parameters.Item(1).Direction = ParameterDirection.Input
        objCommand.Parameters.Item(1).DbType = DbType.String
        objCommand.Parameters.Item(1).Size = 80
        objCommand.Parameters.Item(1).Value = txtBooktitle.Text

        'Parametar za klonu sa cenom...
        objCommand.Parameters.Add(New SqlParameter())
        objCommand.Parameters.Item(2).Direction = ParameterDirection.Input
        objCommand.Parameters.Item(2).DbType = DbType.Currency
        objCommand.Parameters.Item(2).Size = 8
        objCommand.Parameters.Item(2).Value = txtPrice.Text

        'Parametar za klonu au_ID...
        objCommand.Parameters.Add(New SqlParameter())
        objCommand.Parameters.Item(3).Direction = ParameterDirection.Input
        objCommand.Parameters.Item(3).DbType = DbType.String
        objCommand.Parameters.Item(3).Size = 11
        objCommand.Parameters.Item(3).Value = txtAuthorID.Text

        'Parametar za klonu title_ID...
        objCommand.Parameters.Add(New SqlParameter())
        objCommand.Parameters.Item(4).Direction = ParameterDirection.Input
        objCommand.Parameters.Item(4).DbType = DbType.String
        objCommand.Parameters.Item(4).Size = 6
        objCommand.Parameters.Item(4).Value = strID


sa

Code:
        'Parametar za klonu title_ID...
        objCommand.Parameters.Add("@title_id", SqlDbType.VarChar, 6).Value = strID
        'Parametar za klonu sa naslovom...
        objCommand.Parameters.Add("@title", SqlDbType.VarChar, 80).Value = txtBooktitle.Text
        'Parametar za klonu sa cenom...
        objCommand.Parameters.Add("@price", SqlDbType.Money).Value = txtPrice.Text
        'Parametar za klonu au_ID...
        objCommand.Parameters.Add("@au_id", SqlDbType.VarChar, 11).Value = txtAuthorID.Text

S obzirom da @title_id imas dva puta sa istom vrednoscu, dovoljno je da samo jednom definises parametar.
[ Platinum VN @ 08.10.2003. 17:28 ] @
Hvala dotnet na brzom odgovoru.

Zamenio sam 'Parametar' kodove i obrisao ponavljanje za @title_id (verovatno je stamparska greska). Ali ostaju mi greseke:
Line 1 : Incorrect syntax near ‘?’
Line 1 : Incorrect syntax near ‘?’

To je u deo
Code:

'Podesite osobine objekata SQLCommand...
        objCommand.Connection = objConnection
        objCommand.CommandText = "INSERT INTO titles" & _
        "(title_id, title, type, price, pubdate) " & _
        "VALUES(?,?, 'Demo',?, ' " & "'); " & _
        "INSERT INTO titleauthor (au_id, title_id) VALUES (?,?)"
        objCommand.CommandType = CommandType.Text


u knjizi pise:
Code:

"VALUES(?,?, `Demo`,?, `" & DataTime.Now() & "`) ; " & _


Ja sam izbrisao
& DataTime.Now()
jer javlja gresku da ne prepoznaje DataTime. I buni me jos da li u toj liniji treba da stoji znak (`) ili ('). Lose je interpretirana knjiga. Pa je mozda greska kod brisanja. Obrisao sam vise ili manje nego sto treba.
Hvala.
[ dotnet @ 08.10.2003. 17:47 ] @
Citat:
Platinum VN:
Zamenio sam 'Parametar' kodove i obrisao ponavljanje za @title_id (verovatno je stamparska greska). Ali ostaju mi greseke:
Line 1 : Incorrect syntax near ‘?’
Line 1 : Incorrect syntax near ‘?’


Ups izvini u brzini sam zaboravio da ubacim i sledece:
Zameni kod:
Code:

objCommand.CommandText = "INSERT INTO titles" & _
        "(title_id, title, type, price, pubdate) " & _
        "VALUES(?,?, 'Demo',?, '" & "'); " & _
        "INSERT INTO titleauthor (au_id, title_id) VALUES (?,?)"


sa

Code:

objCommand.CommandText = "INSERT INTO titles" & _
        "(title_id, title, type, price, pubdate) " & _
        "VALUES(@title_id,@title, 'Demo',@price, '" & "'); " & _
        "INSERT INTO titleauthor (au_id, title_id) VALUES (@au_id, @title_id)"


Znaci menjas '?' sa nazivima parametara.

Citat:
Platinum VN:
u knjizi pise:
Code:

"VALUES(?,?, `Demo`,?, `" & DataTime.Now() & "`) ; " & _


Ja sam izbrisao
& DataTime.Now()
jer javlja gresku da ne prepoznaje DataTime. I buni me jos da li u toj liniji treba da stoji znak (`) ili ('). Lose je interpretirana knjiga. Pa je mozda greska kod brisanja. Obrisao sam vise ili manje nego sto treba.
Hvala.


Umesto
Code:

`" & DataTime.Now() & "`

mozes da ubacis
Code:

GETDATE()



A znak je definitivno (')

[ Platinum VN @ 08.10.2003. 18:54 ] @
Hvala puno dotnet. :)

Spasao si mi stvar. Da dodam vezba je radjena u oldb konekciji, ali greska je u samom kodu:
Code:

Dim objConnection As OleDbConnection = New _
    OleDbConnection("Provider=SQLOLEDB;” & _
    “Data Source=localhost;Initial Catalog=pubs;" & _
    "User ID=sa;Password=vbdonet;")

Skinuo sam sa neta uradjene vezbe. Nema ova, nego predhodna sa upotrebom DataGrid -om. Uradjen je u SQL konekciji, mada ni ona ne radi. Kopajuci po Help-u dodao sam “Integrated Security=SSPI;” i “obrisao User ID i Password” (jer koristim Use Windows NT Integrated Security) proradilo je u SQL-u (vezba sa net-a). U oldb ne pomaze. Pa sam celu vezbu nastavio u SQL prepravljajuci oldb.

Na ovo nemoras da odgovoris.
Hvala jos jenom. :)
[ Platinum VN @ 09.10.2003. 15:11 ] @
Nisam hteo nista da pisem, zbog mogucih gresaka. Ostalo mi je jos da napisem koda za 2 dugmeta. Sad sam zavrsio vezbu. Hteo bi jos jednom da se zahvalim dotnet –u za pomoc. Vezba koristi OleDb konekciju, a ja sam je uradio u sql konekciji. Heh, niko nije savrsen.
Imam jos jedno pitanje. Nije komplikovano.
Prilikom Perform Search pretrazivanje je moguce samo ako se ukuca tacan naziv. Kako bih mogao da odkucam An i kliknem na dugme, a da mi izlista npr.: Ana, Andjela, Anita... , a da se ne pojavi npr.: Brankica, Bojana ...
Evo kompletnog koda za dugme Perform Search
Code:

Private Sub btnPerformSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPerformSearch.Click

        'Deklarisite lokalne promenljive...
        Dim intposition As Integer

        'Odredite odgovarajucu izabranu stavku i podesite
        'svojstvo Sort objekat DataView...
        Select Case cmbField.SelectedIndex
            Case 0 'Last Name
                objDataView.Sort = "au_lname"
            Case 1 'First Name
                objDataView.Sort = "au_fname"
            Case 2 'Book Title
                objDataView.Sort = "title"
            Case 3 'Price
                objDataView.Sort = "price"
        End Select


        'Ako polje za pretrazivanje nije cena, onda...
        If cmbField.SelectedIndex < 3 Then

            'pronadjite ime ili naslov...
            intposition = objDataView.Find(txtSearchCriteria.Text)
        Else
            'U suprotnom, pronadjite cenu...
            intposition = objDataView.Find(cdec(txtSearchCriteria.Text))
        End If

        If intposition = -1 Then
            'Prikazite poruku u kojoj se vidi da zapis nije pronadjen...
            StatusBar1.Text = "Record Not Found"
        Else
            'U suprotnom, prikazite poruku da je zapis
            'pronadjen i promenite polozaj Currencymanager na taj
            'zapis...
            StatusBar1.Text = "Record Found"
            objCurrencyManager.Position = intposition
        End If

        'Prikazite trenutni polozaj zapisa...
        ShowPosition()
    End Sub

Hvala
[ dotnet @ 10.10.2003. 00:09 ] @
Pozdrav

Citat:
Platinum VN:
Prilikom Perform Search pretrazivanje je moguce samo ako se ukuca tacan naziv. Kako bih mogao da odkucam An i kliknem na dugme, a da mi izlista npr.: Ana, Andjela, Anita... , a da se ne pojavi npr.: Brankica, Bojana ...


Sa Find ovo nije moguce. Probaj nesto tipa
Code:
objDataView.RowFilter = "au_fname LIKE 'An%'"


'%' zamenjuje sve karaktere iza An pod uslovom da se koristi sa LIKE.

E sad nisam siguran kako da uklopis ovo u tvoj primer.

Citat:
Platinum VN:
Hteo bi jos jednom da se zahvalim dotnet –u za pomoc.


Nema na cemu.
[ Platinum VN @ 10.10.2003. 18:14 ] @
Hvala probacu nesto.
Ako uradim nesto pa zapnem pitacu.
[ Platinum VN @ 16.10.2003. 13:46 ] @
Code:

ComboBox1.DataSource = DataSet1
ComboBox1.DisplayMember = "Customers.FirstName"
Me.BindingContest(DataSet1, "Customers").Position = 1

Pronaso sam resenje. Fali mi jos ovo. Moze li se

"Customers.FirstName"

zameniti i povezati ili vec nekako sa comboBox2. koji sadrzi nazive imena redova ("Ime", "Prezime"). Tako da comboBox1 DisplayMember prikazuje izbrani red iz comboBox2.
nesto kao:
ComboBox1.DisplayMember = "Customer." & ComboBox2.Text

Hvala
[ Platinum VN @ 18.10.2003. 18:38 ] @
Da napisem napravio sam, zbog nepoznavanja progarma, uradio sam na drugi nacin.
Mozda bi moglo da se resi kao:
cboName.DataSource = objDataSet.Tables("authors")
cboName.DisplayMember = "ComboBox.Text"
ali sad me mrzi da menjam, posto sam zavrsio.

Hvala
[ Qler01 @ 25.09.2012. 10:19 ] @
Pozdrav svima nadam se da cu dobiti brz odgovor,
zapeo sam kod store procedura i njihovog kreiranja za odredjenu tabelu.
Uradim EXECUTE za liniju code "CREATE PROCEDURE [DBO].[INSERTStatisticsMissingCounts]" uradio sam execute da bi mi sacuvao store proceduru u programmability ali dobijem gresku

>>Msg 102, Level 15, State 1, Procedure insertStatisticsMissingCounts, Line 1
Incorrect syntax near 'insertStatisticsMissingCounts'.<<
Pokrenuo sam pravljenje store procedure New Store procedure u pragrammability

uspeo sam hvala ...

[Ovu poruku je menjao Qler01 dana 25.09.2012. u 11:48 GMT+1]