Avatar billede soli Nybegynder
14. oktober 2001 - 21:03 Der er 7 kommentarer og
1 løsning

Brug af samme tabel flere steder på samme side!

Jeg skal lave et program i Visual C++, hvor vi har en side der skal vise indholdet af en tabel. Tabellen er styret af ID numre, hvor hvert numemr har nogle data. Dette er ikke svært og er gjort, men vi skal på denne side også vise indholdet af foregående nummer i tabellen og det efterfølgende nummer på det så står der i øjeblikket. Programmet er opdelt i 3 horisontale felter, hvor vi i øjeblikket viser tabellen man arbejder på i midten. Men man skal også se indholdet af foregående nummer i tabellen til ventre på siden og efterfølgende nummer til højre på siden og de skal vises automatisk.

Således at jeg arbejder på et nummer 5 i tabellen, den står så i midten. Så skal jeg kunne se indholdet af nummer 4 i venstre side og indholdet af nummer 6 i højreside.

Hvis jeg så vælger at arbejde på nummer 6, skal jeg se nr 5 til venstre og nummer 7 i højre.

Hver af numrene i denne tabel man arbejder på, har fremmedenøgler til andre tabeller.

Hvordan gør man det ?
Avatar billede terry Ekspert
15. oktober 2001 - 09:22 #1
You make a query in Access and then use the query for your form instead of the table.
In the query you can use the same table three times with an outer  join to make sure that you always get some data. I assume that you know enough about SQL to be able to do this.



15. oktober 2001 - 10:50 #2
Min erfaring (fra Jens-Peter i et tidligere spørgsmål jeg selv stillede) viser at det bedst kan betale sig at lave en temporær tabel, hvor man gemmer forrige, nuværende og næste værdi.

Jeg har lavet en lille procedure, som udfylder denne temp-tabel.
Soli, du skal derfor først lave en ny tabel, hvor du har 3 felter: Forrige, ID og Næste.

Derefter skal du køre denne procedure inden du skal have udtrækket:

Sub DanTempTabel()
  On Error Resume Next
  Dim DB As Database
  Dim Rs As DAO.Recordset
  Dim rsTemp As DAO.Recordset
 
  Set DB = CurrentDb
  Set Rs = DB.OpenRecordset(\"DinTabel\", dbOpenSnapshot)
  Set rsTemp = DB.OpenRecordset(\"TempTabel\", dbOpenDynaset)
 
  DB.Execute \"Delete From TempTabel\"
  Do While Not Rs.EOF
    rsTemp.AddNew
    rsTemp!Bognr = Rs!Bognr
    Rs.MovePrevious
    If Rs.BOF Then
        rsTemp!Forrige = Null
        Err.Clear
    Else
        rsTemp!Forrige = Rs!Bognr
    End If
    Rs.Move 2
    If Err Then
      rsTemp!Næste = Null
      Err.Clear
    Else
      rsTemp!Næste = Rs!Bognr
    End If
    rsTemp.Update
  Loop
  Rs.Close
  Set Rs = Nothing
  rsTemp.Close
  Set rsTemp = Nothing
End Sub

Derved oprettes en tabel med de 3 ønskede værdier. Herefter kan du så lave en forespørgsel som joiner de 3 felter med eventuelle øvrige felter fra DinTabel.

Koden burde ret nemt kunne omskrives til C++

/Thomas
Avatar billede soli Nybegynder
15. oktober 2001 - 21:37 #3
Hmmmmmm jeg kender kun C++ og kan ikke rigtigt se hvad det er der foregår i det du har skrevet, er det Basic?

Jeg har løst mit problem, som sådan, men det ligner lidt spagetti kode. Kan de gøres på en anden måde, som er smartere, selvom det virker nu ?

void ActView::DoDataExchange(CDataExchange* pDX)
{
    CRecordView::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(ActView)
    m_pSetLeft->m_actID=m_pSet->m_actID - 1;
    DDX_FieldText(pDX, IDC_actIdLeft, m_pSetLeft->m_actID, m_pSet);
    m_pSet->m_actID=m_pSet->m_actID+1;
    DDX_FieldText(pDX, IDC_actId, m_pSet->m_actID, m_pSet);
    m_pSetRight->m_actID=m_pSet->m_actID+1;
    DDX_FieldText(pDX, IDC_actIdRight, m_pSetRight->m_actID, m_pSet);
    m_pSetLeft->m_actStory=m_pSet->m_actStory-1;
    DDX_FieldText(pDX, IDC_actStory, m_pSet->m_actStory, m_pSet);
    DDX_FieldText(pDX, IDC_actStoryLeft, m_pSet->m_actStory, m_pSet);
    DDX_FieldText(pDX, IDC_actStoryRight, m_pSet->m_actStory, m_pSet);
                                   
//}}AFX_DATA_MAP

}
Avatar billede terry Ekspert
16. oktober 2001 - 08:13 #4
soli> make the query as I suggested. If you send me you database I will make it for you. Its then up to you to implement this into your application.
dkTeBrSa@Europe.lego.com
Avatar billede soli Nybegynder
16. oktober 2001 - 22:27 #5
->>Terry

Databasen er sendt med email.
Avatar billede terry Ekspert
17. oktober 2001 - 08:07 #6
OK, will take a look and get back ASAP
terry
Avatar billede soli Nybegynder
18. oktober 2001 - 13:57 #7
Takker for hjælpen, det skulle nu være løst.
Avatar billede terry Ekspert
18. oktober 2001 - 14:01 #8
Hi soli> Got your mail, hope it works as you want it to. The only thing I can imagine not working correctly is if you need to update, but then I have NO idea as to how you do that in your C++ program. Anyway, lets see how it goes.

Good weekend, and thanks for the points :o)

terry
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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