Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Добавление записи в БД Добавлено: 19.04.07 23:13  

Автор вопроса:  danchik | ICQ: 293234469 
Салют, всем!!!
Народ, помоги, больше нету сил и мозгов...

У меня форма с датагридом и кнопками "загрузить" и "обновить".

Так вот "обновить" у меня не работает....

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
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #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
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #2 Добавлено: 25.04.07 14:17
А по мне так будет проще всего

Dim conn As New OleDbConnection()
        ;Dim da As New OleDbDataAdapter()
        ;Dim ds As New DataSet()
        ;Dim db As New OleDbCommandBuilder(da)
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;" & ";DataSource=funtik.mdb";)
        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
Автор ответа:
 danchik



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
Автор ответа:
 danchik



ICQ: 293234469 

Вопросов: 1
Ответов: 4
 Профиль | | #4 Добавлено: 25.04.07 15:30
S12,Да, вроде не сложно, и самое главное ,в чем и была моя ошибка, все адаптеры и тому подобные объявляешь в самом начале , т.е. до процедур...
Моя грубейшая ошибка - объявляла в самой процедуре...
Спасибо.
Вот только теперь я задачу усложнила...
в Датагриде данные из двух таблиц, связанных между собою ключем...
Пользователь вводит значение, а программка должна эти значения распределять по двум таблицам, причем если вводимые данные не существуют в таблицах...
Написала процедуру, но опять же не понятно почему не работает...

Ответить

Номер ответа: 5
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #5 Добавлено: 26.04.07 09:45
Ну ошибки это не беда, ошибаемся все мы.
А я еще и не по разу в день.
По теме:
А саму процедуру на vb.net написать слабо?
Иль ты всю прогу на си делаешь? Если так дык нафиг тебе барсик?
И еще а не жирно ли юзеру доступ к базе через грид давать?
Ну если всетаки очень надо могу набросать примерное решение через датасет.

PS bv.net--а че ето за изык такой???

Ответить

Номер ответа: 6
Автор ответа:
 danchik



ICQ: 293234469 

Вопросов: 1
Ответов: 4
 Профиль | | #6 Добавлено: 26.04.07 10:50
S12, привет!
пардон, BV.NET это и есть вижуалбэйсик.нет, торопилась :-)
А юзер будет всего лишь вводить данные, но никак не модифицировать...
А на счет процедуры, то мне кажется(по крайней мере как нас учили) если она будет выполняться на сервере плюсов больше будет, хотя могу и ошибаться

Вот ты пишешь просто :

ds = dg1.DataSource
da.Update(ds, "table";)

что если в грид вводятся название города и номер района, которые нужно записать в две твблицы БД?
название города в таблицу городов, номер района в таблицу районов причем сюда же нужно будет записать и код города(через этот код связаны две таблицы), как тогда можно использовать Update(ds)?

Ответить

Номер ответа: 7
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #7 Добавлено: 27.04.07 14:36
Здравы будем, бояре!
Если все так просто, то лично я бы гридом пользоваться не стал. Три текстовых поля
-ID
-TOWN
-REGION
и с юзверя хватит.
Пример
<a href='http://vbnet.ru/forum/show.aspx?id=136515'>здесь</a>
Там каждая строчка прокоментирована, для твоей задачи там только запрос поменять, и можно сразу в код вгонять.

Ответить

Номер ответа: 8
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #8 Добавлено: 27.04.07 14:38
тьфу, форум хтмл в сообщениях не тянет ссылка вот:

http://vbnet.ru/forum/show.aspx?id=136515

Ответить

Номер ответа: 9
Автор ответа:
 danchik



ICQ: 293234469 

Вопросов: 1
Ответов: 4
 Профиль | | #9 Добавлено: 27.04.07 18:17
ему легко:-(....
вместо <faking off> он просто указывает textbox...
а у меня ведь не textbox а целый датагрид...
т.е. там не одна запись...
может, счас конец рабочего дня и я нифига не соображаю, но мне тебя не дается понять...
вот так...
хотя очень хотелось бы...
скажи у меня наверное тяжелый случай и мне уже никак не помочь, нет?

Ответить

Номер ответа: 10
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #10 Добавлено: 28.04.07 13:38
дык я и говорю.
в смысле нафиг датагрид, ИМХО он был придуман для натурально лентяев... :-)
я говорю текстовые поля юзать нада, кода будет конечно, побольше, он будет посложнее но:
во-первых лекче юзерские ошибки отслеживать
во-вторых удобнее работать с данными (ну это кому как нравится, я лично с ООП не очень)
в-третьих экономится место на форме, рама и ресурсы.
ну в общем вроде ясно мысль выразил.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам