Страница: 1 |
Вопрос: Добавление записи в БД | Добавлено: 19.04.07 23:13 |
Автор вопроса: ![]() |
Салют, всем!!!
Народ, помоги, больше нету сил и мозгов... У меня форма с датагридом и кнопками "загрузить" и "обновить". Так вот "обновить" у меня не работает.... 1.Я при Form_Load создаю (не в конструкторе а в коде) вместо датасета дататэйбл со солбцами "код" и "название".... Потом грид связываю с дата тейбл: DataGrid.DataSource=DataTable. 2.Но когда я пишу процедуру для кнопки "загрузить" Sub Loadbutton_Click: DataTable.Clear() adapter.fill(DataTable), выдает ошибку, что DataTable не объявлена, приходится и в Sub Loadbutton_Click писать все что в пункте 1, начиная с объявления DataTable и заканчивая заполнением датагрида DataTable. 3.То же самое с кнопкой "обновить", но если "загрузить" как-то работает после объявления DataTable, то тут дальше загрузки не идет. Тут я все переписываю из пунктов 1 и 2 и добавляю команду с параметрами, у которых в качестве параметров объявляю значения колумов DataTable , т.е. "код" и "название".... Когда запускаешь форму, при нажатии кнопки Load ДатаГрид заполняется таблицей из БД....Далее ввожу запись в Грид и нажимаю кнопку Update, но увы, все что вводилось все исчезает, а данные так и остаются не тронутыми Кто-нибудь может объяснить в чем дело? Поделитесь, пожалуйста, как Вы вообще добавляете данные в БД? Народ помогите, пожалуйста, а? |
Ответы | Всего ответов: 10 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 247906854 Вопросов: 133 Ответов: 882 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 24.04.07 18:40 |
напиши в сторонке кусок рабочего кода и напиши его сюда, а то так на пальцах объясняешь - непонятно.
МЫ добавляем данные в БД по всякому. Если адаптеры юзать, то всё сводится к такому: 1. объявляем на уровне формы таблицу (DataTable). 2. рядом с ней BindingSource (мне удобнее). 3. пишем процедурку Revert в которой заполняем таблицу adap.Fill(YourTable), привязываем YourSource к YourTable, а YourDataGrid к YourSource. 4. пишем процедурку Apply(), в которой делаем adap.Update(YourTable). 5. В Form_Load вызываем Revert(). 6. редактируем данные ручками. 7. в кнопке "сохранить" вызываем Apply(). 8. в кнопке "вернуть" вызываем Revert(). Всё. Ест-но, адаптер должен быть с командами. Сурсы использовать непринципиально. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 24 Ответов: 363 |
Профиль | Цитата | #2 | Добавлено: 25.04.07 14:17 |
А по мне так будет проще всего
Dim conn As New OleDbConnection() ![]() ![]() ![]() dim dg1 as New DataGrid() Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & " ![]() ![]() conn.Open() da.SelectCommand() = New OleDbCommand("select mytable.* from mytable;", conn) da.Fill(ds, "table" ![]() dg1.DataSource() = ds End Sub Private Sub Update_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Update.Click ds = dg1.DataSource da.Update(ds, "table" ![]() End Sub мерси за внимание. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: 293234469 Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #3 | Добавлено: 25.04.07 15:30 |
Спасибо.
Вот только теперь я задачу усложнила... в Датагриде данные из двух таблиц, связанных между собою ключем... Пользователь вводит значение, а программка должна эти значения распределять по двум таблицам, причем если вводимые данные не существуют в таблицах... Написала процедуру, но опять же не понятно почему не работает...Имеются Таб.City(cityID,city_name) и таб.Rrgion(regID,reg_num,cityID Пользователем вводятся значения "city_name" и "reg_num" в VisualBasic. CREATE PROCEDURE insertglobal @cityID INT, @city_name VARCHAR,--значение из параметризованной комманды в BV.NET @regID INT, @reg_num INT --значение из параметризованной комманды в BV.NET AS BEGIN if exists(select cityID from City where city_name=@city_name) BEGIN set @cityID=cityID if exists(select regID from Region where reg_num=@reg_num) set @regID=regID else insert into Region values(@regID,@reg_num,@cityID) END else BEGIN select MAX(cityID)as Mcity from City SET @cityID=Mcity+100 select MAX(regID)as Mreg from Region SET @regID=Mreg+1 insert into City values(@cityID,@city_name) insert into Region values(@regID,@reg_num,@cityID) END END GO Буду очень признательна за помощь... |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: 293234469 Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #4 | Добавлено: 25.04.07 15:30 |
S12,Да, вроде не сложно, и самое главное ,в чем и была моя ошибка, все адаптеры и тому подобные объявляешь в самом начале , т.е. до процедур...
Моя грубейшая ошибка - объявляла в самой процедуре... Спасибо. Вот только теперь я задачу усложнила... в Датагриде данные из двух таблиц, связанных между собою ключем... Пользователь вводит значение, а программка должна эти значения распределять по двум таблицам, причем если вводимые данные не существуют в таблицах... Написала процедуру, но опять же не понятно почему не работает... |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 24 Ответов: 363 |
Профиль | Цитата | #5 | Добавлено: 26.04.07 09:45 |
Ну ошибки это не беда, ошибаемся все мы.
А я еще и не по разу в день. По теме: А саму процедуру на vb.net написать слабо? Иль ты всю прогу на си делаешь? Если так дык нафиг тебе барсик? И еще а не жирно ли юзеру доступ к базе через грид давать? Ну если всетаки очень надо могу набросать примерное решение через датасет. PS bv.net--а че ето за изык такой??? |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: 293234469 Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #6 | Добавлено: 26.04.07 10:50 |
S12, привет!
пардон, BV.NET это и есть вижуалбэйсик.нет, торопилась ![]() А юзер будет всего лишь вводить данные, но никак не модифицировать... А на счет процедуры, то мне кажется(по крайней мере как нас учили) если она будет выполняться на сервере плюсов больше будет, хотя могу и ошибаться Вот ты пишешь просто : ds = dg1.DataSource da.Update(ds, "table" ![]() что если в грид вводятся название города и номер района, которые нужно записать в две твблицы БД? название города в таблицу городов, номер района в таблицу районов причем сюда же нужно будет записать и код города(через этот код связаны две таблицы), как тогда можно использовать Update(ds)? |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 24 Ответов: 363 |
Профиль | Цитата | #7 | Добавлено: 27.04.07 14:36 |
Здравы будем, бояре!
Если все так просто, то лично я бы гридом пользоваться не стал. Три текстовых поля -ID -TOWN -REGION и с юзверя хватит. Пример <a href='http://vbnet.ru/forum/show.aspx?id=136515'>здесь</a> Там каждая строчка прокоментирована, для твоей задачи там только запрос поменять, и можно сразу в код вгонять. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 24 Ответов: 363 |
Профиль | Цитата | #8 | Добавлено: 27.04.07 14:38 |
тьфу, форум хтмл в сообщениях не тянет ссылка вот:
http://vbnet.ru/forum/show.aspx?id=136515 |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: 293234469 Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #9 | Добавлено: 27.04.07 18:17 |
ему легко![]() вместо <faking off> он просто указывает textbox... а у меня ведь не textbox а целый датагрид... т.е. там не одна запись... может, счас конец рабочего дня и я нифига не соображаю, но мне тебя не дается понять... вот так... хотя очень хотелось бы... скажи у меня наверное тяжелый случай и мне уже никак не помочь, нет? |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 24 Ответов: 363 |
Профиль | Цитата | #10 | Добавлено: 28.04.07 13:38 |
дык я и говорю.
в смысле нафиг датагрид, ИМХО он был придуман для натурально лентяев... ![]() я говорю текстовые поля юзать нада, кода будет конечно, побольше, он будет посложнее но: во-первых лекче юзерские ошибки отслеживать во-вторых удобнее работать с данными (ну это кому как нравится, я лично с ООП не очень) в-третьих экономится место на форме, рама и ресурсы. ну в общем вроде ясно мысль выразил. |
Страница: 1 |
|