Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Добавление данных в базу SQL Server c помощью Адо и VBA / 12 сообщений из 12, страница 1 из 1
22.06.2014, 12:59
    #38676527
OlgaMalina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу SQL Server c помощью Адо и VBA
В силу своих умений и возможностей искала решения в инете, но то что находило не работало. Вот что получилось
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
'Добавление в базу нового клиента

Private Sub CommandButton4_Click()
Dim cmd As ADODB.Command

Set cn = New ADODB.Connection
    cn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Имидж_салон1;Data Source=ADMIN-ПК\SQLOLGA"
cn.Open

r = TextBox2.Text
r1 = TextBox3.Text
r2 = TextBox4.Text
r3 = ComboBox3.List(ComboBox3.ListIndex)
r4 = TextBox5.Text
r5 = TextBox6.Text
r6 = TextBox7.Text
Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = cn
cmdADO.CommandText = " Insert  into Клиент (Код_клиента, Фамилия, Имя, Отчество, Размер, Рост, Параметры, Контактный_телефон) values  values (109,r,r1,r2,r3,r4,r5,r6) "




Set rst = cmd.Execute

rst.Open ("Клиент"), cn
rst.MoveFirst
Do While Not rst.EOF
rst.Fields(0).Value = 34
rst.Fields(1).Value = r
rst.Fields(2).Value = r1
rst.Fields(3).Value = r2
rst.Fields(4).Value = r3
rst.Fields(5).Value = r4
rst.Fields(6).Value = r5
rst.Fields(7).Value = r6
rst.Fields(8).Value = r7
rst.MoveNext
Loop
rst.Close
End Sub


Модератор: Учимся использовать тэги оформления кода - FAQ

Скорее всего я делаю совершенно неправильно, прошу подсказать в каком направление мне двигаться
...
Рейтинг: 0 / 0
22.06.2014, 13:19
    #38676538
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу SQL Server c помощью Адо и VBA
Можно (условно) добавить данные в БД двумя способами, вы пытаетесь использовать одновременно оба и при этом оба неправильно.

1) выполнить (execute) инструкцию insert на соединении с БД (recordset (rst) вам в данном случае не нужен)
- во первых, у вас два раза в инструкции встречается values
- во-вторых, что вы хотите добавить в качестве фамилии? букву "r" или все-таки содержимое переменной r? тут вам следует почитать немного основы типов данных и переменных, прежде чем начинать работу, пописать программы попроще
- в третьих, текстовые данные при записи в базу надо заключать в кавычки
- в четвертых, проверять сами данные на наличие кавычек и задваивать их, иначе кавычка в фамилии (если кто-то случайно или намеренно введет ее в текстовое поле) будет неверно интерпретирована (и в худшем случае злоумышленник сможет стереть вам всю базу)

То есть что-то типа
Код: vbnet
1.
"... values (109, """ + replace(r, """", """""") + """, """ + replace(r1....


ну взятие в кавычки и задваивание кавычек естественно логично оформить в виде отдельной функции

2) Можно открыть recordset для записи, но тогда
- запрос должен быть select, а не insert (либо просто имя таблицы)
- в конце нужен update, чтобы данные записались в базу данных

В общем, лучше не примеры ищите, которые вы не понимаете, а почитайте учебник.
...
Рейтинг: 0 / 0
22.06.2014, 13:34
    #38676547
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу SQL Server c помощью Адо и VBA
Shocker.Proдобавить данные в БД двумя способамиесть еще способ, он, по большому счету самый правильный, а если проект большой, то неизбежный, - для записи данных создавать хранимую процедуру (stored procedure, ХП, SP) на сервере, а с клиента передавать данные в эту процедуру. Таки образом, клиенту все равно, как и в каких таблицах будут храниться данные - этим будут заниматься ХП на сервере. Это, видимо, вам пока еще рано осваивать, но знать об этом надо.
...
Рейтинг: 0 / 0
22.06.2014, 13:41
    #38676548
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу SQL Server c помощью Адо и VBA
это также будет небесполезным
...
Рейтинг: 0 / 0
22.06.2014, 13:43
    #38676549
OlgaMalina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу SQL Server c помощью Адо и VBA
На данный момент мне нужно добавить данные просто в базу, любым способом, данных не много так как база выполнена для курсового проекта, и от приложения требуется выводить данные, и добавлять данные в базу, и еще осуществлять поиск по критериям. Но об этом буду думать потом как разберусь просто с добавлением в базу.
Shocker.Pro, спасибо за подсказки может у меня хотя с мертвой точки сдвинется
...
Рейтинг: 0 / 0
22.06.2014, 20:56
    #38676690
OlgaMalina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу SQL Server c помощью Адо и VBA
Shocker.Pro- в четвертых, проверять сами данные на наличие кавычек и задваивать их, иначе кавычка в фамилии (если кто-то случайно или намеренно введет ее в текстовое поле) будет неверно интерпретирована (и в худшем случае злоумышленник сможет стереть вам всю базу)
Shocker.Pro, а если это не нужно, и не требуется, то получается можно без этого обойтись?

Так как вариантов нету, мучаю свою программу. Она добавляет данные, но не те( Я так понимаю, что я где то не правильно передаю значение вот код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Private Sub CommandButton4_Click()
Dim cmd As ADODB.Command
Dim r, r1, r2, r3, r4, r5, r6 As String


Set cn = New ADODB.Connection
    cn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Èìèäæ_ñàëîí;Data Source=ADMIN-ПК\SQLOLGA"
cn.Open

Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = cn
r = TextBox2.Text
r1 = TextBox3.Text
r2 = TextBox4.Text
r3 = ComboBox3.List(ComboBox3.ListIndex)
r4 = TextBox5.Text
r5 = TextBox6.Text
r6 = TextBox7.Text

cmd.CommandType = adCmdText
cmd.CommandText = " Insert into Клиент(Фамилия, Имя, Отчество, Размер, Рост, Параметры, Контактный_телефон) values ('r','r1','r2','r3','r4','r5','r6')" 'Код клиента добавляю счетчиком
cmd.Execute

cn.Close

End Sub
...
Рейтинг: 0 / 0
22.06.2014, 23:29
    #38676739
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу SQL Server c помощью Адо и VBA
OlgaMalina,

Вам уже подсказали, чтобы собрать SQL запрос, нужно собирать его по-частям. Например, так без проверок:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim sqlInsert As String
sqlInsert = "Insert into Клиент(Фамилия, Имя, Отчество, Размер, Рост, Параметры, Контактный_телефон) values ("
sqlInsert = sqlInsert & "'" & r & "',"
sqlInsert = sqlInsert & "'" & r2 & "',"
sqlInsert = sqlInsert & "'" & r3 & "',"
sqlInsert = sqlInsert & "'" & r4 & "',"
sqlInsert = sqlInsert & "'" & r5 & "',"
sqlInsert = sqlInsert & "'" & r6 & "')"

MsgBox sqlInsert 'Проверить корректно составленный SQL запрос
...
Рейтинг: 0 / 0
23.06.2014, 00:12
    #38676753
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу SQL Server c помощью Адо и VBA
OlgaMalinaОна добавляет данные, но не теЕще раз внимательно посмотрите на свою строку. Вы просите добавить в качестве фамилии БУКВУ R. Компьютер честно делает то, что вы просите. Он не может догадаться, что вместо R вы ПОДРАЗУМЕВАЛИ (в уме) содержимое переменной R. Откуда ему знать, что это не фамилия, как вы думаете?

При этом я написал пример, но вы его проигнорировали. Не хотите replace - не надо, но переменная должна быть ВНЕ строки, а не внутри.
Код: vbnet
1.
cmd.CommandText = " Insert into Клиент(Фамилия, Имя, ...) values ('" + r + "','" + r1 + "','" + r2 +....
...
Рейтинг: 0 / 0
23.06.2014, 00:13
    #38676754
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу SQL Server c помощью Адо и VBA
OlgaMalinaа если это не нужно, и не требуется, то получается можно без этого обойтись?на месте придирчивого преподавателя, я бы обязательно ввел кавычку или апостроф
...
Рейтинг: 0 / 0
23.06.2014, 10:29
    #38676926
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу SQL Server c помощью Адо и VBA
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function SQLStr(ByVal str As String) As String
  If Len(str) = 0 Then
    SQLStr = "Null"
  Else
    SQLStr = "'" & Replace(str, "'", "''") & "'"
  End If
End Function

...
cmd.CommandText = "Insert into [Клиент]([Фамилия], [Имя], ...) values (" & SQLStr(r) & "," & SQLStr(r1) & "," & ...
...
Рейтинг: 0 / 0
23.06.2014, 10:34
    #38676931
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу SQL Server c помощью Адо и VBA
Ога.
Вообще, пока я не не перешел на процедуры, у меня была еще более приятная функция, которая добавляла пару - имя поля/значение в нужные места, типа
Код: vbnet
1.
2.
3.
AddSQL "Фамилия", r
AddSQL "Имя", r1
AddSQL "Отчество", r2
...
Рейтинг: 0 / 0
23.06.2014, 19:17
    #38677833
OlgaMalina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу SQL Server c помощью Адо и VBA
Спасибо всем! У меня получилось добавить)

Shocker.Proна месте придирчивого преподавателя, я бы обязательно ввел кавычку или апостроф
Я его уговорю не делать этого. Тем более он сам говорил проектирование базы данных важнее, а здесь он вроде не обещал зверствовать)
Shocker.ProОткуда ему знать, что это не фамилия, как вы думаете?
Все плохо вообщем со мной
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Добавление данных в базу SQL Server c помощью Адо и VBA / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]