Avatar billede cool_code Nybegynder
31. august 2008 - 17:47 Der er 11 kommentarer og
1 løsning

Objekt ikke tilgængeligt?

Hej
Jeg har problemer med at få gemt de opdateringer jeg laver i mit datagridview. Det har virket inden jeg lavede en funktion jeg kaldte (så jeg kunne bruge den til andre data).

Jeg har lavet nogle public variabler som indeholder mine data, disse overfører jeg til updateX, men når jeg skal gemme mine data jeg har i datagridview får jeg fejlmeddelelsen:

"Object reference not set to an instance of an object". Jeg er med på

Der sker med kommandoen getUpdateCommand på DataAdapter objektet.

Nogle ideer til hvad der kan være galt?

\\Cool Code
Avatar billede arne_v Ekspert
31. august 2008 - 17:49 #1
Lyder som om din DataAdapter ref er null ...
Avatar billede cool_code Nybegynder
31. august 2008 - 17:58 #2
men jeg overfører jo den globale ind i min funktion...?
Avatar billede arne_v Ekspert
31. august 2008 - 18:01 #3
"Object reference not set to an instance of an object".

betyder at din kode indeholder:

nogetsomernull.noget

Da du ikke har postet noget kode, så var ovenstående mit bedste gæt.
Avatar billede cool_code Nybegynder
31. august 2008 - 18:37 #4
Hej Arne

Tak for svar, jeg poster lige lidt kode og forklarer lidt undervejs:

Jeg definerer disse globalt:
FbDataAdapter da_public; // jeg bruger Firebird som database
DataSet ds_public;
DataTable memberDT_public;
FbCommandBuilder comB;

Herefter får je data ind i mit datagridviewog det virker fint:

public void selectDBtoDataSet(string qu, string con, string t, DataGridView dgv, FbDataAdapter da, DataSet ds, DataTable dt)
{

    da = new FbDataAdapter(qu, con); // qu="Select * from personer", con=connection og virker fint
    ds = new DataSet(t);
    dt = new DataTable();

    da.Fill(ds, t);
    dt = ds.Tables[0];

    dgv.DataMember = t; // tablename;
    dgv.DataSource = ds.DefaultViewManager;
    dgv.Visible = true;

}


Herefter har jeg en knap som jeg trykker på, her kalder den updateX

private void updateX (GroupBox gb, DataGridView dgv, FbDataAdapter da, DataSet ds, DataTable dt, string table)
{
    FbCommandBuilder comB = new FbCommandBuilder(da);
    comB.DataAdapter = da;
    da.Update(ds, table);
    da.UpdateCommand = comB.GetUpdateCommand();
    da.Update(ds, table);
}

og den fejler rigtig nok med da-kommandoen.

Har du nogen ide til hvorfor jeg ikke holder data i min dataadapter fra et tidligere funktionskald til et andet når jeg via funktionen selectDBtoDataset jo opererer på den globale?

\\cool_code
Avatar billede arne_v Ekspert
31. august 2008 - 19:31 #5
da = new FbDataAdapter(qu, con);

gør ikke det du tror den gør !

da er eb by value parameter ikke en by ref parameter !
Avatar billede arne_v Ekspert
31. august 2008 - 19:31 #6
public void selectDBtoDataSet(string qu, string con, string t, DataGridView dgv, ref FbDataAdapter da, DataSet ds, DataTable dt)

vil bevare den ændrede værdi af da udenfor
Avatar billede cool_code Nybegynder
31. august 2008 - 21:17 #7
jeg har ændret det således at "ref" nu er i funktionen samt kaldet, men ved opdatering af da fejler den på da.Update(ds, table).... Skal den også være "ref"?
Avatar billede arne_v Ekspert
31. august 2008 - 23:35 #8
Ja.

Alle de argumenter som du forsøger at give en værdi inde i en metode skal være ref
(hvis værdierne skal huske udenfor metoden).
Avatar billede cool_code Nybegynder
01. september 2008 - 20:57 #9
Hej Arne
Det var dog utroligt... Mange tak for hjælpen. Det hjalp gevaldigt med "ref" - var ikke lige klar over den eksisterede. Havde dog overvejet en løsning med at aflevere en værdi tilbage via funktionen (return value), men i dette tilfælde var det lige "ref" jeg havde brug for.....
Udover "ref" havde jeg dog også lige en bug i koden som lige skulle findes, men den var ikke blevet fundet hvis ikke jeg var guidet på vej med "ref".

Pointene er dine - de er velfortjent. Smid et svar.

\\cool_code
Avatar billede arne_v Ekspert
01. september 2008 - 22:08 #10
Jeg synes ikke at ref er en speciel pæn konstruktion, så jeg synes at du skal
overveje at redesigne, så det ikke er nødvendigt.

Men givet din nuværende kode struktur, så er ref "handy".

Og et svar.
Avatar billede cool_code Nybegynder
03. september 2008 - 22:21 #11
Ville et redesign bestå i at private funktioner returnerer værdier til public variabler af samme slags??? Det har jeg selv tænkt på men gik væk fra det fordi jeg nogle steder skulle have returneret flere forskellige værdier af forskellige typer hvilket jeg fandt besværligt. Hvordan kunne et redesign tænkes (kort fortalt)

\\cool_code
Avatar billede arne_v Ekspert
04. september 2008 - 02:05 #12
Det pæneste må være at lade metode sætte field i instansen.

Den aller pæneste vil være hvis du kunne have det hele som lokale variable, men det
passer ikke ind i DataSet konceptet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester