PDA

View Full Version : مشکل insert کردن داده به دیتابیس



samiasoft
جمعه 29 آبان 1394, 19:42 عصر
سلام دوستان


من میخواستم در جدولی که نامش در تکست باکس 1 هست داده ای رو در فیلدی ذخیره کنم. اما متاسفانه به مشکل برمیخورم :
فرض کنیم دو جدول بنام ff ff و ff
بطوری اگه درنام جدول فاصله ای باشه متاسفانه داده ذخیره نمیشه!

strsql = "insert into " & TextBox1.Text
strsql &= " (subject) values ('" & TextBox3.Text & "')"


برای مثال الان اگه مقدار تکست باکس برابر زیر باشه در جدول ff ff چیزی ذخیره نمیشه!

TextBox1.Text = "ff ff"

ولی اگه نامش اینطوری باشه ینی فاصله ای نداشته باشه در جدول ff ذخیره میشه.

TextBox1.Text = "ff"

به نظرتون مشکل کجاست؟چرا وقتی در نام تیبل فاصله ای باشه اینطور میشه.

AmiN0012
جمعه 29 آبان 1394, 21:30 عصر
منظورتو از اینکه اسم جدول تو تکست باکس هست نفهمیدم.بین دوتا [] بزار ببین اکی میشه

samiasoft
جمعه 29 آبان 1394, 21:54 عصر
ممنون اره درست شد. پس همیشه نام جدول و فیلدهارو داخل
[] قرار بدیم؟

چون وقتی اینکارو نکرده بودم طبق اون حالت بالایی اگر فاصله ای بین کلمات باشه جدول یا فیلدو نمیشناسه.



یک سوال دیگر اینکه الان فرض کنید ما 4 تا رکورد در دیتابیس اکسس داریم.
رکورد بعدی که میخواد ثبت بشه چطوری ایدی نامبرشو تشخیص بدیم؟(یعنی قبل از ذخیره)

شاید بگید خب اخرین رکورد رو بدست بیارییم و یه مقدار بهش اضافه کنیم. ولی ممکنه مثلا یکی از رکودها پاک شده باشه .که اینطوری ایدی نامبرها دیگه به ترتیب نیستند.

مثلا کل رکورد ما اولش 5 تا بود اخریشو اگر پاک کنیم. و یه رکورد جدید اضافه کنیم ایدی نامبرش میشه 6 . چون 5 رو پاک کردیم 6 میفته.حالا این ایدی نامبر 6 رو چطوری از قبل تشخیص بدیم

AmiN0012
جمعه 29 آبان 1394, 22:04 عصر
جواب سوال اولت.ن بله هست.چون sql فاصله نمیشناسه.
سوال دومتون باید همینظور باشه.چون کد شما نقش کلید اصلی رو داره در اینجا .ولی اگه 5 تا رکورد داشته باشید و شما رکورد 5 امی رو پاک کنید و دوباره اقدام به درج جدید کنید.ای دی شما 5 میشود دوباره

AmiN0012
جمعه 29 آبان 1394, 22:07 عصر
اگه ردیف میخای داشته باشی ی ستون ردیف ایجاد کن تو گرید.سچس در رویداد DataBindingComplete گریدویو کد زیر رو بنویس:

private void Dgv_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
for (int i = 0; i < Dgv.Rows.Count; i++)
{
Dgv.Rows[i].Cells[2].Value = (i + 1).ToString();
}
}

dgv اسم گریدویو من است.
به جای عدد دو عدد ستون ردیفی که گذاشتید رو بنویسید

samiasoft
جمعه 29 آبان 1394, 22:14 عصر
اره طبیعتا باید همینطوری میشد ولی اینطور نمیشه و وقتی رکوردی پاک میشه دیگه ایدی نامبر اون هم کلا استفاده نمیشه .

فیلدی هم که دارم برای ایدی نامبر از نوع AutoNumber هستش.


برای ردیف کد شما از ابتدا ردیف درست میکنه درسته؟ ولی من نمیخوام اینکارو کنم.اخه هر ردیفم دارای فایلی هست که همنام با ایدی نامبری که داره درکنار دیتابیس هست.حالا اگر بیام با کدی که قرار دادید اینکارو کنم کل ردیف هام به هم میریزه و باید دوباره ویرایش کنم

AmiN0012
جمعه 29 آبان 1394, 22:27 عصر
کد منو فقط برا ی نمایش ردیف بزارید باشه تا کاربر ببینه چندتا ردیفه.هیچ تاثیر دیگه ای نداره که بهم بریزه کدتونو.
کد ای دی شما باید باشه.چون حکم کلید اصلی رو داره.

samiasoft
جمعه 29 آبان 1394, 23:23 عصر
ممنون از شما سوال اخر اینکه که برعکس سوال بالاییم هستش :

چگونه بعد از اینکه با دستور insert داده رو داخل دیتابیس ریختیم ایدی نامبراونو بدست بیارییم؟ (بدون استفاده از دیتاگرید یا...)


یا اینطور بگیم که : چگونه ایدی نامبر اخرین رکورد رو بدست بیاریم؟ و در تکست باکس بریزیم.

reza_ali202000
شنبه 30 آبان 1394, 00:15 صبح
select top 1 id from tbl order by desc