problem s cudzim klucom   zodpovězená otázka

VB.NET

caute, mam takzto problem

mama dve tabulky objednavky a detail_objednavky, v detail objednavky mam stlpec IDOBJEDNAVKA, ktory odakzujem na ID v tab. objednavky.mam urobeny dataset na obe tabulky. Na forme mam dva datagridwiev, ktore mi zobrazuju data s jednotlivzch tabuliek.

A teraz problem:

ak zmenim nejake data v tabulkach uz existujuceho zaznamu, tak mi si to cez tlacidlo ulozit na komponente bindingnavigator v pohode ulozim. Avsak ak si cez plusko dam pridat novy zaznam, pridam nejake udaje (samozrejme do stlpcov ako id, resp cos a odakzzuju navzajom v tab. nesaham) a nasledne dam ulozit zaznam tak mi VB vyhodi nasledujucu hlasku

A foreign key value cannot be inserted because a corresponding primary key value does not exist.

aj ked nechapem preco ved v datasete to mam pekne zviazane.

Dufam ze som to podal dost zrozumitelne :-)

Vdaka

Cujan

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A jakou hodnotu sloupce IDOBJEDNAVKA vkládáte při vložení nového záznamu do detail_objednavky? Musí tam být nějáká hodnota která je v tabulce objednavky, tzn. nesmí tam být null a nesmí tam být hodnota která v objednávkách neni.

Teda pokud jsem doatz správně pochopil.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

no ved to je asi ten problem ak stlacim tlacidlo pridat yaynam tak do id v tabulke objednavka da defaultne hodnotu -1 a ta sa automaticky prejavi aj v tabulke detail_objedanvky v stlpci, ktory odakzuje na tab. objednavka. A mam taky pocit, ze ked sa potom ten zaznam ukalda, tak id v tab. objedanvka je priradene id ktore nasleduje, ale to sa uz neprejavi v stlpci idobjednavka v tabulke datail_objednavky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tato chyba neznamená nic jiného, než že do sloupce s cizím klíčem v detailech objednávky zadáváte hodnotu, která nekoresponduje s ID v tabulce objednávky. Zkontrolujte nastavení cizího klíče (jestli odkazuje do správných sloupců) a pokud to bude v pořádku, tak debugujte a testujte, jestli hodnoty sedí :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No to som otestoval, ale ako som popisoval vyzsie, pri novom zazname sa nastavi defaulntna honota id na -1, nie na id ktore ma nasledovat, a az pri ukladani sa tato hodnota nastavi na spravnu hodnotu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

hhhhaaaaaaaallllllllllooooooooo

chlapy, neverim ze sa nikto nestretol este s takym to problemom, uz som dost zufaly. Skuste mi aspon teda ako spravne urobit pridavanie zaznamov do dvoch vzajmne prepojenych tabuliek.

Vdaka

Cujan

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud chcete přidávat data do dvou vzájemně propojených tabulek, je z principu jasné, že nejdřív je musíte přidat do té rodičovské tabulky a potom teprve do tabulky dceřiné.

Vám jde ale nejspíše o to, že máte klasický master-detail formulář, kde přidáváte řádky do detailu a ony "nepochopí", že jejich master je ten z rodičovské tabulky.

Nastudujte si z nápovědy "bindingsource", "datasource" a "datamember" a mělo by Vám to být jasnější.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Toto vsetko mam nastudovane, ale nechapem jednu vec, preco ak dam pridat novy zaznam, tak mi do stlpca, ktory mam automaticky generovany(id) prida standardne hodnotu -1 a nie hodnotu, ktora mam logicky nasledovat.

Cujan

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pak je jediné vysvětlení, že to máte nastudované špatně, protože master-detail přes bindingsource a datamember šlape jak víno. Pevně věřím, že na stránkách věnovaných form databindingu najdete řadu příkladů, které budou plně funkční a budou dělat přesně to, co potřebujete.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud čtete data z SQL serveru, tak si tam nastavte automatické přidávání u daného sloupce Identity specifikation na Yes a vůbec ty ID nenačítejte. Při každém uložení nového záznamu si ID daného "řádku" zadá SQL server sám :-)

Pokud data čtete z mdb tak tak tam to jde snad taky nastavit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tu chybu si SQL Server nevycucal z prstu. Máte tam někde chybu vy a bez podrobnějšího popisu ji nenajdeme. Zkuste poslat zdrojový kód, popřípadě scripty pro vytvoření tabulek a klíčů.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Myslím, že původní tazatel neměl problém s primárním klíčem, ale s cizím klíčem. Tedy pokud jsem jej dobře pochopil.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

a problem je s cudzim klucom.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

toto mam samozrejme takto nastavene.ja to prote nechapem

Ale urcite to bude len dajaka hlupost.

vdaka

cujan

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback