2013-02-22 5 views
0

Здравствуйте, я использую sqlite3 для управления базой данных для моего AM1808. Я создал новую таблицу с именем MilkRateChartEditDetail.Sqlite3 дает «Ошибка: Constraint failed» - сопряжение с AM1808

const char *SQL_CREATE_MILKRATECHARTDETAILEDITTABLE = 
"CREATE TABLE IF NOT EXISTS MilkRateChartEditDetail (\ 
    MilkRateChartEditDetailId INTEGER, \ 
    MilkRateChartId   INTEGER \ 
     REFERENCES MilkRateChart(MilkRateChartId) \ 
     ON UPDATE RESTRICT ON DELETE RESTRICT, \ 
    EffectiveDate   DATE, \ 
    EffectiveShift   UNSIGNED TINYINT, \ 
    MilkType    UNSIGNED TINYINT, \ 
    RCD_RateChartId   UNSIGNED INT,\ 
    SocietyCode    STRING, \ 
    RateType    STRING, \ 
    FAT      FLOAT, \ 
    LRCLR     FLOAT, \ 
    SNF      FLOAT, \ 
    Solid     FLOAT, \ 
    Rate     FLOAT, \ 
    NewRate     FLOAT, \ 
    UpdatedBy    INTEGER \ 
     REFERENCES UserMaster(UsermasterId) \ 
     ON UPDATE RESTRICT ON DELETE RESTRICT, \ 
    UpdatedOn    DATE, \ 
    FlagGSM     UNSIGNED TINYINT, \ 
    FlagUSB     UNSIGNED TINYINT, \ 
    PRIMARY KEY (MilkRateChartEditDetailId))"; 

Теперь я пытаюсь вставить данные в таблицу, используя следующий запрос.

const char *INSERT_MILKRATECHARTEDITDETAILTABLE = 
    "INSERT INTO MilkRateChartEditDetail \ 
     (MilkRateChartEditDetailId,MilkRateChartId, \ 
     EffectiveDate,EffectiveShift,MilkType, \ 
     RCD_RateChartId,SocietyCode,RateType, \ 
     FAT,LRCLR,SNF,Solid,Rate,NewRate, \ 
     UpdatedBy,UpdatedOn,FlagGSM,FlagUSB) \ 
    VALUES(NULL,?,?,?,?,?,?,?,?,?,?,?,?,?,NULL,?,?,?)"; 

Мои данные:

RateChartId : 1 
EffectiveDate : 10-12-2012 
Shift : E 
RateType : FAT 
MilkRateChartId : 30 
FAT : 11.100000 
SNF : 0.000000 
Solid : 0.000000 
CLR : 0.000000 
Updatedby : 1 
MilkType : C 
Rate : 0.000000 
NewRate : 0.000000 

Я получаю ошибку:

INSERT MILKRATECHARTEDITDETAILTABLE, ENTRY :'constraint failed'

Я не могу понять, в чем проблема? как я могу выбраться из этого?

+0

после отладки я обнаружил, что я застрял в sqlite3_step() –

ответ

0

Вы установили несколько внешних ключей (FK для коротких) ограничений, а также у вас есть ограничение первичного ключа.

Если вы пытаетесь вставить запись с таким же первичным ключом (MilkRateChartEditDetailId), или с использованием некоторых значений FK (MilkRateChartId или UpdatedBy), которые не существуют в зарубежных таблицах, вы будете иметь это сообщение об ошибке.

Решение должно быть более внимательным, если эти FK и PK используются надлежащим образом, или оставьте их.

+0

Да, спасибо. Наконец, я получил свою проблему. Я использовал FK (MilkRateChartId), который также используется как FK с другой таблицей. Но мой вопрос в том, что есть ли возможность использовать этот FK с этой таблицей. Прямо сейчас я удалил ограничение FK (MilkRateChartId), и он работает очень, но моя проблема не решена. –

+0

Хорошо, я получил решение. Теперь он работает очень хорошо с FK (MilkRateChartId). Фактически я просто привязывал ПК со столом. Я думал, что это проблема, теперь я получил решение. –

+0

Рад, что вы это поняли! :) – mvp

 Смежные вопросы

  • Нет связанных вопросов^_^