Exkrema problem med databaser, hjälp!

Permalänk
Medlem

Exkrema problem med databaser, hjälp!

Jag får till kod som ändrar och raderar i databasen i Visual studio med SQL, men kan inte ens lägga till en 'int' som vi tog upp i förra kursen (C#). Problemet är att jag fixar det efter många timmar, men förstår fortfarande inte.

Kan någon hjälpa mig att förstå?

Permalänk
Medlem
Skrivet av Maddah:

Jag får till kod som ändrar och raderar i databasen i Visual studio med SQL, men kan inte ens lägga till en 'int' som vi tog upp i förra kursen (C#). Problemet är att jag fixar det efter många timmar, men förstår fortfarande inte.

Kan någon hjälpa mig att förstå?

Blir svårt att hjälpa om du inte postar varken koden eller felmeddelandet du får.

Permalänk
Medlem

Förstår inte alls vad du försöker göra!

Tips. Använd en databashanterare. Typ, phpmyadmin om du har tillgång till det eller något annan hanterare som passar din miljö.

Ställ dina frågor i hanteraren, så ser du enkelt om dom fungerar.
Fungerar dom så är det oftast bara att kopiera frågan/querien till din kod.

för att lägga till en int

ALTER TABLE tablename ADD columname DATATYPE(size);

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070

Permalänk
Skrivet av Maddah:

Jag får till kod som ändrar och raderar i databasen i Visual studio med SQL, men kan inte ens lägga till en 'int' som vi tog upp i förra kursen (C#). Problemet är att jag fixar det efter många timmar, men förstår fortfarande inte.

Kan någon hjälpa mig att förstå?

Vänligen visa din kod genom att nyttja BB-taggarna [ code] <klistra in din kod här> [ /code] (sudda bort mellanslagen vid de vänstra hakparenteserna), och berätta gärna vad du försöker göra som inte verkar gå att göra? När du säger lägga till en 'int' (dvs., "heltal"), menar du då att skapa en variabel av datatypen int som sedan ska innehålla någon giltig data (dvs., ett heltal) av det slaget?

Mvh,
WKL.

Visa signatur

"Den säkraste koden är den som aldrig skrivs"

Permalänk
Medlem

Kod

Skrivet av WebbkodsLärlingen:

Vänligen visa din kod genom att nyttja BB-taggarna [ code] <klistra in din kod här> [ /code] (sudda bort mellanslagen vid de vänstra hakparenteserna), och berätta gärna vad du försöker göra som inte verkar gå att göra? När du säger lägga till en 'int' (dvs., "heltal"), menar du då att skapa en variabel av datatypen int som sedan ska innehålla någon giltig data (dvs., ett heltal) av det slaget?

Mvh,
WKL.

Jag har haft lunginflammation som blev mycket värre, därför har jag inte svarat..

Lyckades ändra namnet på en region, nu är det att radera en produkt som är problemet. Fick bort produkter efter att ha suttit hela natten igår och trodde att jag hade löst det. Stängde av datorn och gick och la mig, när jag startade datorn igen var produkterna tillbaka!

Nu har jag ändrat koden efter att ha lyckats slarva bort den första, tagit bort databasen i SSMS och lagt in den på nytt. Förstår att jag inte kan ta bort produkten p.g.a. att den finns på andra ställen. Var har jag tänkt fel?

```<using System;
using System.Data.SqlClient;

class Program
{
static void Main()
{
try
{
// Anslutningssträng
string connectionString = @Data Source=MADELENE\SQLEXPRESS;Initial Catalog=Northwind33; Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False; ApplicationIntent=ReadWrite;MultiSubnetFailover=False;

// Produkten jag vill radera.
int productIdToDelete = 1;

// Metod
DeleteProductFromAllPlaces(connectionString, productIdToDelete);

Console.WriteLine($"Produkten med ProductID {productIdToDelete} har raderats från alla ställen.");
}
catch (Exception ex)
{
Console.WriteLine("Ett fel uppstod: " + ex.Message);
}
}

static void DeleteProductFromAllPlaces(string connectionString, int productId)
{
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();

using (SqlTransaction transaction = connection.BeginTransaction())
{
try
{
// Raderar från alla relaterade tabeller.
string deleteOrderDetailsQuery = "DELETE FROM [Order Details] WHERE ProductID = @ProductId";

using (SqlCommand deleteOrderDetailsCommand = new SqlCommand(deleteOrderDetailsQuery, connection, transaction))
{
deleteOrderDetailsCommand.Parameters.AddWithValue("@ProductId", productId);
deleteOrderDetailsCommand.ExecuteNonQuery();
}

Console.WriteLine($"Produkten med ProductID {productId} har raderats från Order Details.");

//Raderar från "huvutabellen".
string deleteProductQuery = "DELETE FROM Products WHERE ProductID = @ProductId";

using (SqlCommand deleteProductCommand = new SqlCommand(deleteProductQuery, connection, transaction))
{
deleteProductCommand.Parameters.AddWithValue("@ProductId", productId);
deleteProductCommand.ExecuteNonQuery();
}

Console.WriteLine($"Produkten med ProductID {productId} har raderats från Products.");

// Alla ändringar godkänns.
transaction.Commit();
}
catch (Exception ex)
{
// Om något går fel.
transaction.Rollback();
throw; // Tar tillbaka till Try - catch om något går fel.
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("Ett fel uppstod: " + ex.Message);
}
}
}
```

Permalänk
Medlem

Ursäkta att jag inte förhandsgranskade, nu ser det bättre ut..

using System; using System.Data.SqlClient; class Program { static void Main() { try { // Anslutningssträng string connectionString = @Data Source=MADELENE\SQLEXPRESS;Initial Catalog=Northwind33; Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False; ApplicationIntent=ReadWrite;MultiSubnetFailover=False; // Produkten jag vill radera. int productIdToDelete = 1; // Metod DeleteProductFromAllPlaces(connectionString, productIdToDelete); Console.WriteLine($"Produkten med ProductID {productIdToDelete} har raderats från alla ställen."); } catch (Exception ex) { Console.WriteLine("Ett fel uppstod: " + ex.Message); } } static void DeleteProductFromAllPlaces(string connectionString, int productId) { try { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlTransaction transaction = connection.BeginTransaction()) { try { // Raderar från alla relaterade tabeller. string deleteOrderDetailsQuery = "DELETE FROM [Order Details] WHERE ProductID = @ProductId"; using (SqlCommand deleteOrderDetailsCommand = new SqlCommand(deleteOrderDetailsQuery, connection, transaction)) { deleteOrderDetailsCommand.Parameters.AddWithValue("@ProductId", productId); deleteOrderDetailsCommand.ExecuteNonQuery(); } Console.WriteLine($"Produkten med ProductID {productId} har raderats från Order Details."); //Raderar från "huvutabellen". string deleteProductQuery = "DELETE FROM Products WHERE ProductID = @ProductId"; using (SqlCommand deleteProductCommand = new SqlCommand(deleteProductQuery, connection, transaction)) { deleteProductCommand.Parameters.AddWithValue("@ProductId", productId); deleteProductCommand.ExecuteNonQuery(); } Console.WriteLine($"Produkten med ProductID {productId} har raderats från Products."); // Alla ändringar godkänns. transaction.Commit(); } catch (Exception ex) { // Om något går fel. transaction.Rollback(); throw; // Tar tillbaka till Try - catch om något går fel. } } } } catch (Exception ex) { Console.WriteLine("Ett fel uppstod: " + ex.Message); } } }

Permalänk
Medlem
Skrivet av AllMessedUp:

Förstår inte alls vad du försöker göra!

Tips. Använd en databashanterare. Typ, phpmyadmin om du har tillgång till det eller något annan hanterare som passar din miljö.

Ställ dina frågor i hanteraren, så ser du enkelt om dom fungerar.
Fungerar dom så är det oftast bara att kopiera frågan/querien till din kod.

för att lägga till en int

ALTER TABLE tablename ADD columname DATATYPE(size);

PHP är nästa kurs (nästa vecka), därför måste jag klara detta innan dess. Tänkte sitta hela helgen med detta så att jag åtminstone kan förstå nästa steg.. Detta är bara en enkel uppgift, sedan ska slutuppgiften in. Har frågat folk i klassen, men antingen är de för duktiga eller så kan de inte detta, de har bara fokuserat på att få godkänt. Jag vill kunna detta när slutuppgiften är inlämnad!

Permalänk
Medlem
Skrivet av martengooz:

Blir svårt att hjälpa om du inte postar varken koden eller felmeddelandet du får.

Jag får inget felmeddelande, men produkterna tas helt enkelt inte bort trots att programmet säger att de är borttagna. Först försvann dom i SSMS (Northwind), men sedan är de tillbaka igen! Koden ligger nu här i tråden.

Permalänk
Medlem

När du "fångar" exceptions i den inre try-catch satsen så rullar du tillbaka utan att printa felmeddelande. Det kan vara fallet att det det står exakt vad som gått fel där, men det "ex" du får i den yttre try-catch är ett nytt exception som bara råkar ha samma namn som den inre. Printa det inre ex och se om det står något där.

Måste dock säga att jag inte är så fräsch på databaser nu för tiden.

Visa signatur

i5-7600k . GTX 1080 . 16 GB

Permalänk
Medlem

Kan även vara bra att skriva ut att allting gått bra EFTER att du committat din transaktion
För annars, som du märker, kanske du tror att allting gått bra trots att transaktionen rullas tillbaka.

D.v.s. först
transaction.Commit();
sen
Console.WriteLine($"Produkten med ProductID {productId} har raderats från Products.");

Jag gissar att då kommer du sluta få meddelandet om att allting gick bra. Antagligen lyckas den inte med commiten men meddelandet hinner skrivas ut.

Kan även vara bra att logga ut saker såsom hela SQL strängen, så du faktiskt kör det du förväntar dig.

Visa signatur

5700x3D | RTX 2060 Super | 2 TB M.2 | 32 GB RAM | Gigabyte DS3H| 750 WATT

Permalänk
Medlem

// Anslutningssträng string connectionString = @Data Source=MADELENE\SQLEXPRESS;Initial Catalog=Northwind33; Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False; ApplicationIntent=ReadWrite;MultiSubnetFailover=False;

I koden du postat är inte din connectionstring en string. Det fattas " ".
Men det kanske bara är här. Kompilatorn borde ha klagat när du försökt köra koden.

Visa signatur

Herman

Permalänk
Medlem
Skrivet av sworst:

// Anslutningssträng string connectionString = @Data Source=MADELENE\SQLEXPRESS;Initial Catalog=Northwind33; Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False; ApplicationIntent=ReadWrite;MultiSubnetFailover=False;

I koden du postat är inte din connectionstring en string. Det fattas " ".
Men det kanske bara är här. Kompilatorn borde ha klagat när du försökt köra koden.

Det går att köra koden, men produkterna tas inte bort i SSMS..

Permalänk
Medlem
Skrivet av sworst:

// Anslutningssträng string connectionString = @Data Source=MADELENE\SQLEXPRESS;Initial Catalog=Northwind33; Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False; ApplicationIntent=ReadWrite;MultiSubnetFailover=False;

I koden du postat är inte din connectionstring en string. Det fattas " ".
Men det kanske bara är här. Kompilatorn borde ha klagat när du försökt köra koden.

Jag använder @ tänker jag?

Permalänk
Medlem

Är det någon som orkar köra skärmdelning via ex. Discord? Jag läser vad ni skriver, men förstår inte riktigt..

Permalänk
Medlem
Skrivet av Maddah:

Jag använder @ tänker jag?

skriv ut variabeln connectionString på skärmen, så får du se vad den har för värde

Visa signatur

5700x3D | RTX 2060 Super | 2 TB M.2 | 32 GB RAM | Gigabyte DS3H| 750 WATT

Permalänk
Medlem

Jag förstår inte vad du menar? Den fungerar och produkter har tagits bort. Kommer de tillbaka för att strängen är fel? Har fått slutuppgiften nu, därav min panik över detta. Måste klara det!

Permalänk
Medlem
Skrivet av Maddah:

Jag förstår inte vad du menar? Den fungerar och produkter har tagits bort.

Har den verkligen tagits bort eller får du bara texten på skärmen som säger att den tagits bort?

Visa signatur

A modest man is usually admired, if people ever hear of him.

Permalänk
Medlem
Skrivet av Roger W:

Har den verkligen tagits bort eller får du bara texten på skärmen som säger att den tagits bort?

De togs bort och jag var jättenöjd kl 07 på morgonen. När jag startade datorn var de tillbaka! Jag har tydligen skrivit en kass kod.

Permalänk
Medlem

Koden, som inklistrad, ser i huvudsak korrekt ut. Men som påpekats kompilerar den antagligen inte, eftersom anslutningssträngen inte är en korrekt sträng. Jag glömde Windows-datorn på jobbet och orkar inte dra igång en C#-kompilator och installera SQL server på Linux, så jag kan dock inte dubbelkolla.

Med andra ord är det svårt att hjälpa dig, eftersom man inte kan lita på att du kör koden du har klistrat in.

Hur som helst är debuggning med utskrifter rätt primitivt. Stega igenom programmet i debuggern. Gör slagningar parallellt i SSMS. Skriv in två frågor för orderrader och produkter i SMMS i samma SSMS-fönster. Kör frågorna före radering av orderraderna, efter att orderraderna raderats, efter att produkterna raderats och efter att transaktionen committats. Hur beter det sig?

Vill du visa för tråden hur det beter sig, ta fyra skärmdumpar med SMSS och Visual Studio på skärmen, där du visar var du stannat debuggern och ställt frågorna. Det finns en "Ladda upp bild"-knapp när du skriver inlägg.

Permalänk
Medlem

Hur ser du att den är borta och hur ser du att den finns?
Går du mot samma databas?

Permalänk
Medlem

...fortsättning.

Skrivet av Maddah:

Nu har jag ändrat koden efter att ha lyckats slarva bort den första, tagit bort databasen i SSMS och lagt in den på nytt. Förstår att jag inte kan ta bort produkten p.g.a. att den finns på andra ställen. Var har jag tänkt fel?

När jag citerar det här inlägget ser jag att den oformatterade koden har en korrekt anslutningssträng. Så det är nog bara något på forumet som har manglat din kod (at-tecken med citat används för att skriva ett användarnamn man vill pinga).

Hur som helst: Om det finns något mer än orderrader som refererar till produkterna så kommer det, beroende på hur databasen är byggd, inte att gå att ta bort produkterna förrän även dessa referenser är borttagna.

Här ser det ut som om StockTake och PurchaseOrderDetails refererar Products i någon version av Northwind.

ExecuteNonQuery returnerar antalet rader som berörs. Det kan vara bra att titta på det svaret av ett DELETE-kommando.

Permalänk
Medlem

Att lära sig programmera är bara halva jobbet. Den andra halvan är att lära sig hitta felen på ett effektivt sätt. När man kombinerar dessa två är slutresultatet oftast ett stort "Aha!". Jag har alltid hävdat att programmering är som att måla en tavla. Man har olika penslar (språk) och färger (nyckelord if/while..) i sin enkelhet, men slutresultatet är mer som ett konstverk. Ibland blir det lite fel nyanser som kan vara svåra att hitta innan ljuset faller in på rätt sätt, men de är oftast lätta att rätta till med rätt färg på rätt plats.

Permalänk
Medlem
Skrivet av Maddah:

De togs bort och jag var jättenöjd kl 07 på morgonen. När jag startade datorn var de tillbaka! Jag har tydligen skrivit en kass kod.

Som @Wiinis säger, hur ser du att raderna är borta?

Jag skulle rekommendera att du kollar direkt i databasen och inte förlitar dig på att din kod ger en textutmatning som säger att koden är borta.

D.v.s. använd ett verktyg för att direkt kolla i databasen.

Alternativt, om de verkligen försvann: du har inte råkat återställa databasen på något sätt?

Visa signatur

5700x3D | RTX 2060 Super | 2 TB M.2 | 32 GB RAM | Gigabyte DS3H| 750 WATT

Permalänk
Medlem
Skrivet av FX9:

Som @Wiinis säger, hur ser du att raderna är borta?

Jag skulle rekommendera att du kollar direkt i databasen och inte förlitar dig på att din kod ger en textutmatning som säger att koden är borta.

D.v.s. använd ett verktyg för att direkt kolla i databasen.

Alternativt, om de verkligen försvann: du har inte råkat återställa databasen på något sätt?

De försvann i SQL- programmet (databasen). Sedan var de tillbaka igen när jag vaknade.

Just nu har jag hållit på och ändrat så mycket, så jag tog bort databasen och laddade in den på nytt. Jag kan som sagt inte detta så bra..

Permalänk
Medlem

Ett tips är att testa en sak i taget.
Säkerställ att det ser ut som du tror.
Andas
Ibland tar det nämligen tid att förstå och det händer alla!

Permalänk
Medlem
Skrivet av Maddah:

Ursäkta att jag inte förhandsgranskade, nu ser det bättre ut..

using System; using System.Data.SqlClient; class Program { static void Main() { try { // Anslutningssträng string connectionString = @Data Source=MADELENE\SQLEXPRESS;Initial Catalog=Northwind33; Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False; ApplicationIntent=ReadWrite;MultiSubnetFailover=False; // Produkten jag vill radera. int productIdToDelete = 1; // Metod DeleteProductFromAllPlaces(connectionString, productIdToDelete); Console.WriteLine($"Produkten med ProductID {productIdToDelete} har raderats från alla ställen."); } catch (Exception ex) { Console.WriteLine("Ett fel uppstod: " + ex.Message); } } static void DeleteProductFromAllPlaces(string connectionString, int productId) { try { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlTransaction transaction = connection.BeginTransaction()) { try { // Raderar från alla relaterade tabeller. string deleteOrderDetailsQuery = "DELETE FROM [Order Details] WHERE ProductID = @ProductId"; using (SqlCommand deleteOrderDetailsCommand = new SqlCommand(deleteOrderDetailsQuery, connection, transaction)) { deleteOrderDetailsCommand.Parameters.AddWithValue("@ProductId", productId); deleteOrderDetailsCommand.ExecuteNonQuery(); } Console.WriteLine($"Produkten med ProductID {productId} har raderats från Order Details."); //Raderar från "huvutabellen". string deleteProductQuery = "DELETE FROM Products WHERE ProductID = @ProductId"; using (SqlCommand deleteProductCommand = new SqlCommand(deleteProductQuery, connection, transaction)) { deleteProductCommand.Parameters.AddWithValue("@ProductId", productId); deleteProductCommand.ExecuteNonQuery(); } Console.WriteLine($"Produkten med ProductID {productId} har raderats från Products."); // Alla ändringar godkänns. transaction.Commit(); } catch (Exception ex) { // Om något går fel. transaction.Rollback(); throw; // Tar tillbaka till Try - catch om något går fel. } } } } catch (Exception ex) { Console.WriteLine("Ett fel uppstod: " + ex.Message); } } }

Försöker förstå vad som är problemet? Är det C# eller SQL? Kan du SQL?
Om du kör select * from [Order Details] och select * from products, hur ser det ut då?

Hur lägger du till produkter? Vad får de för productId?

Är det så att du lagt till flera produkter som får olika productId?

delete from products where productID=1 kommer bara att ta bort produkten som har productId 1.

Vill du ta bort allt kan du köra "delete from products".

Det skulle underlätta om du förklarar VAD du försöker åstadkomma och HUR det ser ut, alltså vad som finns i databasen och hur du la in det där. Som det är nu är det en gissningslek att ens förstå problemet.

Permalänk
Medlem
Skrivet av cp_:

Försöker förstå vad som är problemet? Är det C# eller SQL? Kan du SQL?
Om du kör select * from [Order Details] och select * from products, hur ser det ut då?

Hur lägger du till produkter? Vad får de för productId?

Är det så att du lagt till flera produkter som får olika productId?

delete from products where productID=1 kommer bara att ta bort produkten som har productId 1.

Vill du ta bort allt kan du köra "delete from products".

Det skulle underlätta om du förklarar VAD du försöker åstadkomma och HUR det ser ut, alltså vad som finns i databasen och hur du la in det där. Som det är nu är det en gissningslek att ens förstå problemet.

Ja, precis, jag skriver SQL, fast i i Visual studio, det är Northwind - databasen. Jag har inte lagt till något, utan vi fick den av läraren. När jag körde SELECT * FROM Produkts försvann produkterna först och jag var jättenöjd. Höll på till kl 7 på morgonen, stängde av datorn och när jag vaknade och startade datorn igen var de tillbaka! Det ska väl inte ens vara möjligt, läser överallt att man ska vara försiktig med delete? Så jag skrev om hela koden. Och nu försvinner ingenting, blir galen på detta!

Nu har jag dock fått gå vidare till slutuppgiften - Lunds långlager. Jag hann vara med ett litet tag på den innan jag blev sjuk, så har nog stommen till den sparad. Den har dock ingen databas så jag har inte ännu klurat ut hur det har att göra med de uppgifter jag har jobbat med den senaste veckan.

Om jag är virrig så kan det eventuellt bero på att jag var ute igår för första gången på några år

Permalänk
Medlem
Skrivet av Maddah:

Ja, precis, jag skriver SQL, fast i i Visual studio, det är Northwind - databasen. Jag har inte lagt till något, utan vi fick den av läraren. När jag körde SELECT * FROM Produkts försvann produkterna först och jag var jättenöjd. Höll på till kl 7 på morgonen, stängde av datorn och när jag vaknade och startade datorn igen var de tillbaka! Det ska väl inte ens vara möjligt, läser överallt att man ska vara försiktig med delete? Så jag skrev om hela koden. Och nu försvinner ingenting, blir galen på detta!

Nu har jag dock fått gå vidare till slutuppgiften - Lunds långlager. Jag hann vara med ett litet tag på den innan jag blev sjuk, så har nog stommen till den sparad. Den har dock ingen databas så jag har inte ännu klurat ut hur det har att göra med de uppgifter jag har jobbat med den senaste veckan.

Om jag är virrig så kan det eventuellt bero på att jag var ute igår för första gången på några år

Om vi fortsätter gissningsleken, så försöker du ta bort alla produkter. Du skriver produkterna (plural). Men du har "where productId=1", så du tar bara bort en produkt eller ingen alls om det inte finns någon som har productId=1.

Fortfarande ett tips:
Om du vill att någon skall hjälpa dig så måste du beskriva VAD du vill göra och hur tabellerna ser ut. Vad går uppgiften ut på?

Vi har ingen aning om vad "Northwind" är, vi har ingen aning om vad "Lunds långlager" är. Vi kan inte läsa tankar.

Kan du beskriva problemet du försöker lösa för dig själv med egna ord? Ofta kommer man på lösningen själv när man beskriver problemet för någon annan. Alltså när man förstår problemet/uppgiften fullt ut.

Permalänk
Medlem
Skrivet av cp_:

Om vi fortsätter gissningsleken, så försöker du ta bort alla produkter. Du skriver produkterna (plural). Men du har "where productId=1", så du tar bara bort en produkt eller ingen alls om det inte finns någon som har productId=1.

Fortfarande ett tips:
Om du vill att någon skall hjälpa dig så måste du beskriva VAD du vill göra och hur tabellerna ser ut. Vad går uppgiften ut på?

Vi har ingen aning om vad "Northwind" är, vi har ingen aning om vad "Lunds långlager" är. Vi kan inte läsa tankar.

Kan du beskriva problemet du försöker lösa för dig själv med egna ord? Ofta kommer man på lösningen själv när man beskriver problemet för någon annan. Alltså när man förstår problemet/uppgiften fullt ut.

Northwind databasen är en standard DB med lite smådata i sig som ofta används i exempel eller utbildning rörande relationsdatabaser. Den är väldigt välkänd

Men jag håller med att vill man ha hjälp är det bra att visa tabellerna och hur det ser ut, så slipper vi gå ut och hämta hem en egen kopia av northwind

Visa signatur

5700x3D | RTX 2060 Super | 2 TB M.2 | 32 GB RAM | Gigabyte DS3H| 750 WATT

Permalänk
Medlem
Skrivet av FX9:

Northwind databasen är en standard DB med lite smådata i sig som ofta används i exempel eller utbildning rörande relationsdatabaser. Den är väldigt välkänd

Men jag håller med att vill man ha hjälp är det bra att visa tabellerna och hur det ser ut, så slipper vi gå ut och hämta hem en egen kopia av northwind

Ja precis, den är standard.

Men nu lämnar jag den bakom mig och fortsätter till slutuppgiften.. har en stomme, men läser just nu på om normalisering.

"Ni skall skapa ett program för att hantera ett lager vid Lund. Appen kallas för Lunds
Långlager. Informationen skall lagras i en databas. Programmet skall hantera data med
läsningar och skrivningar till databasen vid VARJE tillfälle när en förändring i databasen sker
eller när ni skall visa en ny uppgift..
Programmet skall vara väl kommenterat och metoder, klasser och variabler skall ha tydliga
namn som beskriver deras uppgift.
Databasen skall vara normaliserad till minst 2a och helst 3e normalgraden.
Lagret har 20 platser. En lagerplats kan hantera en helpall eller en halvpall eller 2 halvpallar
eller vara tom. Det är obligatoriskt för G och VG att en Lagerplats kan hantera både helpall
samt en eller två halvpallar eller vara tom.
Det skall vara en enkel objektbaserad lösning, ARV ÄR INTE NÖDVÄNDIGT. Där
de lagrade pallarna kan hanteras i en pallklass som har minst följande
Egenskaper.
PallId
Palltyp - Hel eller Halv
Ankomsttid -
En pall känner INTE till var den är lagrad.
Lagerplatserna hanteras i databasen med en eller flera tabeller som håller reda på var de olika
pallarna är lagrade.
Det finns inga krav på att hantera användare eller pallägare i denna lösning.
Programmet skall hantera minst nedanstående funktioner...lämpligen genom en
meny och metoder. Alla tillstånd dvs det som talar om vilka pallar som finns i

lagret och som har funnits på lagret skall hämtas från databasen och skrivas till
databasen. Vi skall med andra ord INTE ha några listor/arrayer i vårt program
annat än för att hålla reda på data som har hämtats med tex en reader.
● Inlämning av pallar - ta in pallid samt palltyp och försök lagra det i mån av
plats, glöm inte att lagra ankomsttiden. Programmet väljer själv plats.
● Utlämning av pallar - Hämta ut pallen med ett visst pallid, halvpall kostar 40
kr per påbörjad timme, helpallar kostar 80 kr per påbörjad timme.
● Flyttning av en pall till en viss plats (använd pallens pallid samt den
önskade platsen)
● Sökning efter pallar skall tala om var pallen med angivet pallid står
(samt palltyp)
● Utskrift av innehållet i alla lagerplatser
Se till att dina metoder tar parametrar och gärna ger returvärden.
Om en pall inte kan hittas....pallid finns inte så tala om det.
Felhantering är inte nödvändig.".