Avatar billede soli Nybegynder
24. oktober 2001 - 16:05 Der er 21 kommentarer og
1 løsning

Indsættelse ad nye records, lavet i Visual C++ 6.0

Jeg har denne funktion, som indsætter en ny record i min tabel. Men for at skulle lave en ny record, skal man selv skrive næste characterID. Men kan man ikke få den til selv at skrive næste characterID automatisk, så den bare tæller en op, således at hvis der er 6 records, så laver den automatisk en der hedder 7 og så skal men taste data ind, uden selv at skrive 7 ?


void CCharactersForm::OnRecordAdd()
{
  if (m_bAddMode)
    OnMove(ID_RECORD_FIRST);
   
  CString strCurrentCourse = m_pSet->m_characterID;
  m_pSet->AddNew();
  m_pSet->SetFieldNull(&(m_pSet->m_characterID),FALSE);
  m_pSet->m_characterID = strCurrentCourse;
  m_bAddMode = TRUE;
  m_ctlCharacters.SetReadOnly(FALSE);
  UpdateData(FALSE);
}
Avatar billede jpk Nybegynder
24. oktober 2001 - 16:09 #1
Jo, du skal sætte characterID til at autoincrementere i DB\'en...
Avatar billede soli Nybegynder
24. oktober 2001 - 16:13 #2
Hvordan gør man det i en ACCESS databse og kan det gøres uden, så den selv gør det i programmet. Programmet skal helst kunne flyttes over til at bruge en anden database, uden at der skal laves en masse på den database.
Avatar billede jpk Nybegynder
24. oktober 2001 - 16:15 #3
Sæt feltets type til Autonumber
Avatar billede jpk Nybegynder
24. oktober 2001 - 16:16 #4
Nar du siger en anden database, mener du så en anden Access DB eller en anden \'type\', fx SQL Server eller DB2 osv?
Avatar billede soli Nybegynder
24. oktober 2001 - 16:21 #5
Programmet skal også kunne køre på en SQL database senere, men nu er det vigtigst at den kan køre på en ODBC Access lige nu.

men tænkte på om man kunne programmerer sig ud af problemet ???
Avatar billede jpk Nybegynder
24. oktober 2001 - 16:23 #6
Du kan godt oprette tabellerne via SQL-kald, hvis det er det du mener???
Kaldene vil dog nok være forskellige til de forskellige databaser!
Avatar billede soli Nybegynder
24. oktober 2001 - 16:27 #7
Jeg tænkte på om man kunne tage den sidst brugte characterID og ligge en til, for derefter at sætte den ind i den nye record der laves, der skal ogsp indtastes info til den record.

Men den arbejder kun med characterID, den er promær nøgle.
Avatar billede jpk Nybegynder
24. oktober 2001 - 16:29 #8
I SQL Server kan man få returneret id\'et når man indsætter en record, men jeg ved ikke rigtig med Access...
Avatar billede soli Nybegynder
24. oktober 2001 - 16:33 #9
Hmmmmmm

Men m_pSet holder styr på hvor man er henne, kunne man ikke bruge den?

man kan f.eks kalde m_pSet->MoveLast();

Så står man på den sidste record, så må man da kunne bruge det til at få sat den characterID + 1 ind i den nye record.

Måske jeg skulle kikke lidt i hvad der står i AddNew(); funktionen.
Avatar billede jpk Nybegynder
24. oktober 2001 - 16:35 #10
jo, jeg har på et tidspunkt brugt dette:

int CdbDecease::InsertDB()
{
    if(m_pDeceaseSet->CanUpdate())
    {
        m_pDeceaseSet->AddNew();
        if(WriteObjSet())
        {
            m_pDeceaseSet->Update();
            m_pDeceaseSet->Requery();

            // return new id
            CDBVariant varValue;
            m_pDeceaseSet->MoveLast();
            m_pDeceaseSet->GetFieldValue(\"ID\", varValue);
            return varValue.m_iVal;
        }
    }
    return 0;
}
Avatar billede jpk Nybegynder
24. oktober 2001 - 16:36 #11
Men du skal være opmærksom på, at den måde at gøre det på er ikke sikker hvis der er flere samtidige brugere!
Avatar billede soli Nybegynder
24. oktober 2001 - 22:48 #12
jeg prøver den, der er kun 1 bruger på i øjeblikket. Da det er en lokal Db der skal synkroniseres, men det er først senere.
Avatar billede soli Nybegynder
25. oktober 2001 - 02:55 #13
Arrrrrrk jeg er gået total kold nu. Klokken er 0250 og jeg kan ikke finde ud af hvordan jeg får lukket min dialogboks ned, ved at trykke på en Ok knap. Det er simpelt, men jeg kan ikke, nogle der gidder skrive commandoen for at boksen ned ?
Avatar billede jpk Nybegynder
25. oktober 2001 - 08:31 #14
Man vil typisk kalde
CDialog::OnOK();

men du kan også explicit kalde EndDialog.
Avatar billede wisen Nybegynder
25. oktober 2001 - 08:38 #15
Hvis du benytter ADO kan du faktisk lade den returnere det (autoincrement) id som lige er blevet sat ind; Den gør det på sessionsbasis, så i princippet burde det kunne bruges med flere samtidige brugere.

Jeg har vist et eksempel et eller andet sted på hvordan man bruge ADO, hvis du ikke allerede har styr på det...

/Wisen
Avatar billede soli Nybegynder
25. oktober 2001 - 15:09 #16
Du må gerne fortælle om ADO, jeg er nemmerlig Borland Builder C++ menneske, der skal bruge Visual C++, sååå jeg har ikke helt styr på alle tingene endnu.
Avatar billede wisen Nybegynder
26. oktober 2001 - 08:59 #17
... Giv mig din E-mail adresse, så kan jeg sende dig et eksempel....
Avatar billede soli Nybegynder
26. oktober 2001 - 13:23 #18
solitude@worldonline.dk
Avatar billede wisen Nybegynder
26. oktober 2001 - 13:37 #19
Sendt...
Avatar billede wisen Nybegynder
31. oktober 2001 - 13:46 #20
Var det noget der kunne bruges ?
Avatar billede soli Nybegynder
23. november 2001 - 15:02 #21
Hejsa allesammen og undskyld de manglende svar, men jeg har lige været til hovedopgaveeksamen og fået den afsluttet med et 9-tal.

Så jeg er færdig og har ikke brug for mere hjælp med den opgave. Så tak til alle for deres hjælp.
:-)
Avatar billede soli Nybegynder
20. april 2004 - 15:06 #22
Tråd lukket
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
Kurser inden for grundlæggende programmering

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