Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подскажите в чем проблема / 25 сообщений из 68, страница 1 из 3
14.06.2010, 00:24
    #36685286
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
-2147467259 [MySQL][ODBC 3.51 Driver][mysqld-5.1.38-community]Cannot add or update a child row: a foreign key constraint fails (`it`.`sales`, CONSTRAINT `usluga_id` FOREIGN KEY (`id`) REFERENCES `uslugi` (`id`) ON UPDATE CASCADE)
Код: plaintext
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.
Private Sub ado(a As String)
Adodc1.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=it; User=root;Password=506;Option=3;"
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select * from " + a
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
End Sub
Private Sub Command2_Click()
Adodc1.Recordset.AddNew
Adodc1.Recordset("usluga_id").Value = Combo1.Text
Adodc1.Recordset("date").Value = Text2.Text
Adodc1.Recordset("amount").Value = Val(Text1.Text)
Adodc1.Recordset.Update
End Sub

Private Sub Form_Load()
ado ("sales")
Text2.Text = Str(Date)
Conn.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=it; User=root;Password=506;Option=3;"
Set r = Conn.Execute("select * from uslugi")
k =  0 
r.MoveFirst
    Do Until r.EOF
        a = r.Fields("id").Value
        b = r.Fields("name").Value
        Combo1.AddItem a, k
        List1.AddItem (Str(a) + vbTab + b)
        'MsgBox a
        r.MoveNext
        k = k +  1 
    Loop

r.Close
Combo1.Text = "УСЛУГИ"
Combo2.Text = "Клиенты"
End Sub
проблема в том что первая запись добавилась нормально , при добавлении второй стала выходить такая ошибка, ниже структура базы данных(Mysql 5)
...
Рейтинг: 0 / 0
14.06.2010, 00:25
    #36685288
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
подскажите в чем проблема , может добавлять лучше через запрос?
...
Рейтинг: 0 / 0
14.06.2010, 00:27
    #36685292
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
форма для наглядности
...
Рейтинг: 0 / 0
14.06.2010, 00:30
    #36685296
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Что неясно в сообщении об ошибке? Тебе известно, что такое constraint, ключ и внешний ключ?
...
Рейтинг: 0 / 0
14.06.2010, 00:40
    #36685305
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.Pro,
понятно что есть primary key в таблице uslugi (id), есть foreign key в таблице sales (usluga_id)
и связь есть между ними, только я че то не понимаю в чем проблема
...
Рейтинг: 0 / 0
14.06.2010, 00:43
    #36685309
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
aduka05admShocker.Pro,
понятно что есть primary key в таблице uslugi (id), есть foreign key в таблице sales (usluga_id)
и связь есть между ними, только я че то не понимаю в чем проблема

Ну проблему-то ты и не изложил, то бишь не указал, что ты делаешь и на какой строке возникает эта ошибка, так что я только предполагаю, что на Adodc1.Recordset.Update

Еще вопрос, ты с полной ответственностью за свои действия поставил каскадное обновление?
...
Рейтинг: 0 / 0
14.06.2010, 00:51
    #36685326
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.Pro,
сегодня читал про каскадное обновление (в случае обновления данных в таблице uslugi,обновляются данные и в таблице sales), хотелось чтобы было так))
Shocker.ProНу проблему-то ты и не изложил, то бишь не указал, что ты делаешь и на какой строке возникает эта ошибка, так что я только предполагаю, что на Adodc1.Recordset.Update
именно на этой строке и вышла ошибка
а хотел потренироваться и узнать , как связи работают , как работать с несколькими таблицами,
задача состоит в следующем выбираем услугу из комбо и добавляем данные в ячейку, только первая запись прошла нормально , но почему со второй проблема
...
Рейтинг: 0 / 0
14.06.2010, 00:54
    #36685334
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
aduka05adm,

Я с MySQL - редактором не очень, ты уверен, что вот тут все правильно задал?
...
Рейтинг: 0 / 0
14.06.2010, 01:00
    #36685339
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.Pro,
вот блин ))) он автоматом сам так проставил.
поменял как вы показали и нормально)) спасибо.
а разве для целостности данных , не лучше использовать каскадное обновление?
...
Рейтинг: 0 / 0
14.06.2010, 01:04
    #36685343
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.Pro,
и еще вопрос хотел задать,
не удобно использовать комбо в этих целях(так как там ключ а по нему искать потом запись в листбоксе не очень удобно ,для того чтобы правильно выбрать нужный ключ), может посоветуете вы сами как это реализуете?
...
Рейтинг: 0 / 0
14.06.2010, 01:06
    #36685344
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Ну и че тогда MySQL про каскадное обновление вопил в сообщении об ошибке. Оно в данном случае никаким боком...

aduka05admа разве для целостности данных , не лучше использовать каскадное обновление?

А зачем тебе каскадное обновление? Ты собираешься ключи менять в таблице услуг? Это, по меньшей мере, странно.
...
Рейтинг: 0 / 0
14.06.2010, 01:06
    #36685345
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
aduka05admне удобно использовать комбо в этих целях(так как там ключ а по нему искать потом запись в листбоксе не очень удобно ,для того чтобы правильно выбрать нужный ключ), может посоветуете вы сами как это реализуете?

см. свойсво комбобока ListItem
...
Рейтинг: 0 / 0
14.06.2010, 01:19
    #36685359
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.Proсм. свойсво комбобока ListItem
ой, соррисорри, спутал
в общем так:
Код: plaintext
1.
2.
3.
a = r.Fields("id").Value
b = r.Fields("name").Value
Combo1.AddItem b
Combo1.ItemData(Combo1.NewIndex) = a

Код: plaintext
1.
2.
Adodc1.Recordset.AddNew
Adodc1.Recordset("usluga_id").Value = Combo1.ItemData(Combo1.ListIndex)
...
Рейтинг: 0 / 0
14.06.2010, 01:25
    #36685368
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.Pro,
Shocker.ProА зачем тебе каскадное обновление? Ты собираешься ключи менять в таблице услуг? Это, по меньшей мере, странно.
просто в 1с менял код в номенклатуре руками , поэтому думал лишним не будет)
а как сделать так чтобы как в 1с по типу создавать документ и добавлять туда несколько записей , насколько я понимаю это создается отдельно таблица с номерами документов и записей в нем , сколько записей ,столько и строчек с номерами документов ,а в форме записывается это все в массив а далее запись идет всех записей в таблицу?а журнал документов реализуется , примерно так через запрос выводим все записи с номерами документов и группируем ?
...
Рейтинг: 0 / 0
14.06.2010, 01:27
    #36685370
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.ProShocker.Proсм. свойсво комбобока ListItem
ой, соррисорри, спутал
в общем так:
Код: plaintext
1.
2.
3.
a = r.Fields("id").Value
b = r.Fields("name").Value
Combo1.AddItem b
Combo1.ItemData(Combo1.NewIndex) = a

Код: plaintext
1.
2.
Adodc1.Recordset.AddNew
Adodc1.Recordset("usluga_id").Value = Combo1.ItemData(Combo1.ListIndex)

примерно так и думал , только думал что индекс в комбо по любому должен идти по порядку (0.1.2.3)
...
Рейтинг: 0 / 0
14.06.2010, 01:32
    #36685378
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
aduka05admпросто в 1с менял код в номенклатуре руками , поэтому думал лишним не будет)
Не смешивай.
В 1С, помимо кода, есть еще UID - вот он-то и является настоящим ключом и по нему идет связь между таблицами, а не по коду.

aduka05admа как сделать так чтобы как в 1с по типу создавать документ и добавлять туда несколько записей , насколько я понимаю это создается отдельно таблица с номерами документов и записей в нем , сколько записей ,столько и строчек с номерами документов ,а в форме записывается это все в массив а далее запись идет всех записей в таблицу?а журнал документов реализуется , примерно так через запрос выводим все записи с номерами документов и группируем ?
Не, зачем дублировать данные?
Делается две связанных таблицы, в одной - реквизиты документа (номер, тип, дата, контрагент и т.п.), а в другой - содержимое - код товара, цена, ставка НДС, бух.счет и т.п. Посмотри в конфигураторе - там же все очевидно.

А где редактировать данные... Ну это от фантазии зависит. Лично я последнее время редактируемое содержимое держу в отдельной таблице прямо в базе.
...
Рейтинг: 0 / 0
14.06.2010, 01:34
    #36685381
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
aduka05admпримерно так и думал , только думал что индекс в комбо по любому должен идти по порядку (0.1.2.3)
Индекс и ItemData - не одно и то же.
Индекс определяет сортировку и насильно задавать его совершенно необязательно. Сортировку надо указывать в select-e, который данные для загрузки готовит.
...
Рейтинг: 0 / 0
14.06.2010, 01:44
    #36685389
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.Pro,
Shocker.ProДелается две связанных таблицы, в одной - реквизиты документа (номер, тип, дата, контрагент и т.п.), а в другой - содержимое - код товара, цена, ставка НДС, бух.счет и т.п. Посмотри в конфигураторе - там же все очевидно.
и там где содержимое в каждой записи проставляется ключ документа?
Shocker.ProА где редактировать данные... Ну это от фантазии зависит. Лично я последнее время редактируемое содержимое держу в отдельной таблице прямо в базе.
и очищаете ее потом?
...
Рейтинг: 0 / 0
14.06.2010, 01:45
    #36685391
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
aduka05admShocker.Pro,
Shocker.ProДелается две связанных таблицы, в одной - реквизиты документа (номер, тип, дата, контрагент и т.п.), а в другой - содержимое - код товара, цена, ставка НДС, бух.счет и т.п. Посмотри в конфигураторе - там же все очевидно.
и там где содержимое в каждой записи проставляется ключ документа?
Shocker.ProА где редактировать данные... Ну это от фантазии зависит. Лично я последнее время редактируемое содержимое держу в отдельной таблице прямо в базе.
и очищаете ее потом?

Разумеется * 2

Все, ушел спать.
...
Рейтинг: 0 / 0
14.06.2010, 01:45
    #36685392
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.Pro,
для создания форм visual basic используете?
...
Рейтинг: 0 / 0
14.06.2010, 01:46
    #36685393
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.Pro,
спасибо))
...
Рейтинг: 0 / 0
05.07.2010, 15:37
    #36723617
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.Pro,

а в чем смысл связывания тогда?
если вдруг пользователь решит удалить данные?
...
Рейтинг: 0 / 0
05.07.2010, 15:50
    #36723643
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
aduka05admа в чем смысл связывания тогда?
если вдруг пользователь решит удалить данные?

Это соблюдение принципов ЦЕЛОСТНОСТИ ДАННЫХ (перечитай это словосочетание 10 раз).

Необязательно пользователь удалит данные. Ты можешь ошибиться в программе (причем ошибка может быть такая, которая проявляется раз в год), в результате чего могут либо удалиться данные, либо вставиться неправильные данные. Ты можешь начать править базу руками при какой-то модернизации и т.п. Наличие связи не даст тебе допустить такую ошибку - операция по изменению/удалению основного ключа или по вставке неправильных данных просто не будет выполнена.

Кроме того, БД становится гораздо сопровождаемее. Любой программер, который будет дорабатывать базу, откроет диаграмму и разберется, как устроена база. Да и ты сам через пару-тройку лет окажешься в такой ситуации.

По этой же причине надо максимально точно определять типы данных в таблицах, обязательно запрещать NULL там, где по логике вещей его возникнуть не должно и т.п.
...
Рейтинг: 0 / 0
05.07.2010, 16:11
    #36723701
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.Pro,
спасибо
...
Рейтинг: 0 / 0
05.07.2010, 22:41
    #36724400
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в чем проблема
Shocker.Pro,
решение не нашел
смотрел здесь ,хотя много интересного описано там
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подскажите в чем проблема / 25 сообщений из 68, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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