I am using dbf strong text module in my projects.
my dbf file condtains 5 fields. (ACKNO is primary key field)
ACKNO INVNO INVDT CTYPE DTYPE
Now I have problem with querying multiple fields with multiple conditions.
import dbf
import datetime
table = dbf.Table('inv.dbf', 'ACKNO N(12,0); INVNO N(8,0); INVDT D; CTYPE C(1); DTYPE C(1);')
table.open(dbf.READ_WRITE)
for datum in (
(1000000001, 1001, dbf.Date(2023, 11, 23), 'A', 'I'),
(1000000002, 1002, dbf.Date(2023, 11, 23), 'G', 'D'),
(1000000003, 1003, dbf.Date(2023, 11, 23), 'G', 'I'),
(1000000004, 1004, dbf.Date(2023, 11, 23), 'A', 'C'),
(1000000005, 1005, dbf.Date(2023, 11, 23), 'G', 'C'),
(1000000006, 1006, dbf.Date(2023, 11, 23), 'A', 'I'),
(1000000007, 1007, dbf.Date(2023, 11, 23), 'G', 'D'),
(1000000008, 1008, dbf.Date(2023, 11, 23), 'A', 'D'),
(1000000009, 1009, dbf.Date(2023, 11, 24), 'G', 'I'),
(1000000010, 1010, dbf.Date(2023, 11, 24), 'A', 'C'),
(1000000011, 1011, dbf.Date(2023, 11, 24), 'A', 'I'),
(1000000012, 1012, dbf.Date(2023, 11, 24), 'A', 'I'),
(1000000013, 1013, dbf.Date(2023, 11, 24), 'N', 'D'),
(1000000014, 1014, dbf.Date(2023, 11, 24), 'A', 'I'),
(1000000015, 1015, dbf.Date(2023, 11, 25), 'A', 'C'),
(1000000016, 1016, dbf.Date(2023, 11, 25), 'G', 'I'),
(1000000017, 1017, dbf.Date(2023, 11, 25), 'A', 'I'),
(1000000018, 1018, dbf.Date(2023, 11, 25), 'A', 'C'),
(1000000019, 1019, dbf.Date(2023, 11, 25), 'A', 'D'),
(1000000020, 1020, dbf.Date(2023, 11, 26), 'A', 'D'),
(1000000021, 1021, dbf.Date(2023, 11, 26), 'G', 'I'),
(1000000022, 1022, dbf.Date(2023, 11, 26), 'N', 'D'),
(1000000023, 1023, dbf.Date(2023, 11, 26), 'A', 'I'),
(1000000024, 1024, dbf.Date(2023, 11, 26), 'G', 'D'),
(1000000025, 1025, dbf.Date(2023, 11, 26), 'N', 'I'),
):
table.append(datum)
idx = table.create_index(key=lambda rec: (rec.INVDT, rec.CTYPE, rec.DTYPE))
# below query with 23-Dec-2023, CTYPE = "A", DTYPE = "I" is working
records = idx.search(match=(datetime.date(2023, 11, 23), "A", "I"))
# below query with INVDT 23-Dec-2023, CTYPE Non blank, DTYPE = Non blank is not working
records = idx.search(match=(datetime.date(2023, 11, 23), not "", not ""))
records = idx.search(match=(datetime.date(2023, 11, 23), not None, not None))
for row in records:
print(row[0], row[1], row[2], row[3], row[4])
table.close()