@deadspace12

Как исправить ошибку Cannot add or update a child row: a foreign key constraint fails?

разрабатываю я проект арм диспетчерской автовокзала
вот моя бд с связями:
61e6951f858c5958656685.png
только в таблице перевозок я позже переименовал вторичные ключи
вот подробно покажу где создавал ключи:
61e6958fbc967412736972.png
и мое приложение написанное на C# Windows Forms:
1.здесь основная моя форма здесь добавляю удаляю данные и чтоб добавить данные перевозок(данные в dataGridView1) я перехожу на форму след. кликая на кнопку добавить из GroupBox(Перевозка)
61e69658dded9326598699.png
после этого я вывел в отдельные datagridview таблицы, чтоб выбирал какие данные вставить в таблицу перевозки, ввожу номер перевозки и после нажимаю добавить:
61e696d21c800943122348.png
и как только пытаюсь добавить данные высвечивает такую ошибку:
61e6974f8c54e342327375.png
теперь покажу как это дело все написал:
private void button1_Click(object sender, EventArgs e)
{
string CommandText = "Select " +
"transportation.number, " +
"route.Route_number, " +
"route.destination, " +
"route.Sending_time, " +
"route.Arrival_time, " +
"ticket.Place, " +
"ticket.Name, " +
"ticket.Cost, " +
"driver.Nname " +
"From " +
"auto.transportation, " +
"auto.route, " +
"auto.ticket, " +
"auto.driver " +
"Where " +
"(transportation.route = route.ID_Route) AND " +
"(transportation.ticket = ticket.id_Ticket) AND " +
"(transportation.driver = driver.idDriver) ";
MySqlCommand cmd = new MySqlCommand(CommandText);
if (textBox1.Text != "")
{
if (comboBox1.SelectedIndex == 0)
CommandText = CommandText + "' AND (transportation.number = '" + textBox1.Text + "')";
if (comboBox1.SelectedIndex == 1)
CommandText = CommandText + "' AND (route.Route_number = '" + textBox1.Text + "')";
if (comboBox1.SelectedIndex == 2)
CommandText = CommandText + "' AND (route.destination LIKE '" + textBox1.Text + "'%') ";
if (comboBox1.SelectedIndex == 3)
CommandText = CommandText + "' AND (ticket.Name LIKE '" + textBox1.Text + "'%') ";
if (comboBox1.SelectedIndex == 4)
CommandText = CommandText + "' AND (driver.Nname LIKE '" + textBox1.Text + "'%') ";
}
MySqlDataAdapter dataAdapter = new MySqlDataAdapter(CommandText, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "auto.transportation");
dataGridView1.DataSource = ds.Tables["auto.transportation"].DefaultView;
}
вот здесь это код в начальной форме я вывожу данные перевозки после того как добавлю их.
Здесь я выполняю любые запросы:
public void My_Execute_Non_Query(string CommandText)
{
conn.Open();
MySqlCommand myCommand = conn.CreateCommand();
myCommand.CommandText = CommandText;
myCommand.ExecuteNonQuery();
conn.Close();
}
А здесь это код второй формы добавки данных для перевозки:
private void button2_Click(object sender, EventArgs e)
{
string CommandText;
string num_per, ID_M, ID_B, ID_D, ID_A, ID_V;
int row;
Form2 f = new Form2();

if (f.ShowDialog() == DialogResult.OK)
{
if (f.textBox1.Text == "") num_per = "0";
else num_per = f.textBox1.Text;
row = f.dataGridView1.CurrentCell.RowIndex;
ID_M = Convert.ToString(f.dataGridView1[0, row].Value);
row = f.dataGridView2.CurrentCell.RowIndex;
ID_B = Convert.ToString(f.dataGridView2[0, row].Value);
row = f.dataGridView3.CurrentCell.RowIndex;
ID_D = Convert.ToString(f.dataGridView3[0, row].Value);
row = f.dataGridView4.CurrentCell.RowIndex;
ID_A = Convert.ToString(f.dataGridView4[0, row].Value);
row = f.dataGridView5.CurrentCell.RowIndex;
ID_V = Convert.ToString(f.dataGridView5[0, row].Value);
CommandText = "Insert Into auto.transportation (transportation.number, transportation.route,transportation.ticket," +
"transportation.dispatcher," +
" transportation.bus, transportation.driver) " +
"Values ('" + num_per + "', '" + ID_M + "', '" + ID_B + "', '" +
ID_D + "', '" + ID_A + "', '" + ID_V + "')";
My_Execute_Non_Query(CommandText);
button1_Click(sender, e);
}
}
я читал искал кое что нашел такое:
когда в MySQL WorkBench я снимаю ограничения внешних ключей глобально он данные добавляет все работает но в начальной форме dataGridView1 таблицы перевозки он это не отображает а в самой бд добавления видны
вот такую команду использовал для снятия ограничений:
SET GLOBAL FOREIGN_KEY_CHECKS=0;
подскажите пожалуйста с чего начать как исправить или может я совсем все плохо написал и переделывать полностью надо.
А и там еще какие то поля переименовал в надежде что сработает это если вы заметите несходства
Заранее спасибо за помощь, все подробно описал чтоб было понятно мою ситуацию!!!
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
высвечивает такую ошибку

Ну тебе же вменяемо говорят, что не выполняется ограничение.

Согласно ограничению то значение, которое ты вставляешь в поле dispatcher таблицы transportation в базе данных auto, уже должно существовать в поле id_dispatcher таблицы dispatcher той же базы.

Так что следи, что идентификатор диспетчера, который ты присваиваешь полю, взят не с потолка.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы