Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   [ Εκθέσεις ] Εκτύπωση απο διαφορετικούς πίνακες. (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/1187-ektiposi-apo-diaforetikois-pinakes.html)

dimmag 02-06-11 16:35

Εκτύπωση απο διαφορετικούς πίνακες.
 
Γεια σας.
Θα ήθελα μια βοήθεια στο εξής αν γίνεται.
Πως μπορώ σε μια έκθεση να τυπώσω δύο στήλες πεδία απο πίνακες που δεν συνδέονται μεταξύ τους πχ 1η στήλη "πεδίο1"από πίνακα Α και 2η στήλη "πεδίο2" από πίνακα Β στην ίδια σελίδα.


Φιλικά

Δημήτρης

Meteora 02-06-11 18:47

Καλησπέρα

Φτιάξε με κενή έκθεση με το όνομα ΑΛΦΑ. Στον τομέα ΄Λεπτομέρειες' αυτής πέρασε(*) άλλες δύο εκθέσεις δίπλα-δίπλα ή την μια κάτω από την άλλη. Η μια εξ αυτων να περιέχει το πεδίο του ενός πίνακα και η άλλη το πεδίο του άλλου πίνακα.

(*) Φτιάξε τις δυο θυγατρικές εκθέσεις και μετά την κενή την οποία έδωσα το όνομα ΑΛΦΑ. Φέρε την ΑΛΦΑ σε περιβάλλον σχεδίασης και σύρε τις δυο θυγατρικές μέσα στην ΑΛΦΑ.

Με εκτίμηση

Νίκος Δ.

kapetang 02-06-11 18:49

Καλησπέρα

Δημήτρη, θα μπορούσες να στηρίξεις την έκθεσή σου σε ένα ερώτημα που θα περιέχει όλα τα πεδία των δύο πινάκων, που χρειάζεσαι.
Επειδή οι πίνακες δε συνδέονται το ερώτημα θα μας δώσει όλους τους συνδυασμούς κάθε γραμμής του πρώτου πίνακα με όλες τις γραμμές του δεύτερου πίνακα.
Έτσι αν οι πίνακες έχουν μ και ν γραμμές αντίστοιχα, το ερώτημα θα δώσει μΧν (γινόμενο) γραμμές και τόσες θα εμφανιστούν στην έκθεση.
Το ερώτημα σε προβολή SQL θα έχει τη μορφή:
Κώδικας:

SELECT tableA.*, tableB.* FROM tableA, tableB;
Ελπίζω να κατάλαβα το ζητούμενο και να βοήθησα.

Φιλικά/Γιώργος

dimmag 02-06-11 20:36

Σας ευχαριστώ για την άμεση ανταπόκριση.
Την λύση του Γιώργου την ήξερα και δεν εξυπηρετεί.
Στην ουσία ήθελα δύο ενεξάρτητες εκθέσεις που να εμφανίζονται στην ίδια έκθεση.
Με κάλυψε πλήρως η πρόταση του Νίκου.


Φιλικά

Δημήτρης

kapetang 04-06-11 11:18

1 Συνημμένο(α)
Καλημέρα στην παρέα

Στο πρόβλημα της εμφάνισης σε μία έκθεση στοιχείων από δύο πίνακες που δεν ενώνονται, το οποίο έθεσε ο Δημήτρης (Dimmag), δόθηκε από το φίλο μου Νίκο (Meteora) μια απλή και χωρίς κώδικα λύση.
Δουλεύοντας για κάποια λύση με κώδικα σκέφτηκα δύο τρόπους:
1) Στο συμβάν με το άνοιγμα της έκθεσης (Open) να δημιουργείται ένας νέος πίνακας (Test) που θα συγκεντρώνει τα στοιχεία των δύο πινάκων (tablaA, tableB) και θα αποτελεί την προέλευση εγγραφών της έκθεσης.
Τη λύση αυτή την υλοποίησα στην έκθεση «rptTableA_TableB», στη ΒΔ που επισυνάπτω.
2) Στο συμβάν με το άνοιγμα της έκθεσης (Open) να τίθεται η προέλευση εγγραφών της έκθεσης στον πίνακα που έχει τις περισσότερες εγγραφές (πχ TableA) και η προέλευση του στοιχείου ελέγχου που ανήκει στον άλλο πίνακα (πχ fieldB του πίνακα tableB) σε μία κατάλληλη συνάρτηση.
Η προσπάθεια αυτή, απέτυχε παταγωδώς και φαίνεται στην έκθεση «rptTableA_TableB2».
Ενώ όταν ο πίνακας «tableB» έχει περισσότερες εγγραφές από τον «tableΑ» δίνει σωστά αποτελέσματα όταν συμβαίνει το αντίθετο βγάζει μήνυμα λάθους.
Παρά τις προσπάθειες «κόλλησα» και δεν μπόρεσα να διορθώσω το λάθος.
Παραθέτω τον κώδικα, με κάποια σχόλια, και παρακαλώ τους φίλους του φόρουμ να τον μελετήσουν και να βοηθήσουν στη διόρθωση.
Κώδικας:

Option Compare Database
Option Explicit
Dim x As Long

Private Sub Report_Open(Cancel As Integer)
    On Error GoTo Error_Trap
    If DCount("*", "tableA") >= DCount("*", "tableB") Then
        Me!fieldB.ControlSource = "=SetB([fieldA])"
        Me.RecordSource = "tableA"
    Else
        Me!fieldA.ControlSource = "=SetA([fieldB])"
        Me.RecordSource = "tableB"
    End If
    Exit Sub
Error_Trap:
    MsgBox Err.Number & " " & Err.Description
End Sub

Public Function SetA(m As Variant)
    'Ο κώδικας λειτουργεί σωστά
    With CurrentDb.OpenRecordset("tableA")
        'Επειδή ο πίνακας tableA έχει λίγότερες εγγραφές από τον tableB
        'κάποια στιγμή ή .move x θα προκαλέσει λάθος
        On Error Resume Next
        .Move x
        If Err = 0 Then
            SetA = !fieldA
        Else
            SetA = ""
            Err.Clear
        End If
        On Error GoTo 0
        x = x + 1
    End With
End Function

Public Function SetB(m As Variant)
    'Δε λειτουργεί σωστά. Πρόσθεσα παγίδευση σφάλματος
    ' για να φανεί το είδος του σφάλματος
    On Error GoTo TrapError
    With CurrentDb.OpenRecordset("tableB")
        'On Error Resume Next
        .Move x
        If Err = 0 Then
            SetB = !fieldB
        Else
            SetB = ""
            Err.Clear
        End If
        'On Error GoTo 0
        x = x + 1
    End With
    Exit Function
TrapError:
    MsgBox Err.Number & " " & Err.Description
End Function

Φιλικά/Γιώργος


Η ώρα είναι 18:26.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2