This is Controller.m in view mode; [Download] [Up]
/* Controller.m: * A quick demo of how to get around a problem with qualifiers that include * reference to attributes from a one-to-one relationship. * * You may freely copy, distribute, and reuse the code in this example. * NeXT disclaims any warranty of any kind, expressed or implied, as to its * fitness for any particular use. * * Written by: Mai Nguyen, NeXT Developer Support * * */ #import "Controller.h" #define INSTALL_MODEL NXLocalizedString("Please install OracleDemo.dbmodel into your ~/Library/Databases directory and restart.", NULL, "Notify user that OracleDemo.dbmodel must be installed in his local Databases directory.") @implementation Controller /* * Extract the actual database and recordlist from the DBModule UI Object */ -appDidInit:sender { /* Notify the user if the database can't be found */ if (!(dbDatabase = [DBDatabase findDatabaseNamed:"OracleDemo" connect:YES])) { NXRunAlertPanel(NULL,INSTALL_MODEL, "OK", NULL, NULL); return self; } [dbDatabase setDelegate:self]; dbFetchGroup = [dbModule rootFetchGroup]; rootEntity = [dbDatabase entityNamed:"Order"]; /* Another workaround is to do this via a connection from the * relationship attribute to the File's Owner. Then, you don't * need to add an expression explicitly, and the next 2 lines * of code are no longer needed. */ dbExpression = [[DBExpression alloc] initForEntity: rootEntity fromDescription:"customer.customerID"]; [dbFetchGroup addExpression:dbExpression]; dbQualifier = [[DBQualifier alloc] initForEntity:rootEntity fromDescription:"customer.state = %s", "CA"]; [dbFetchGroup fetchContentsOf:rootEntity usingQualifier:dbQualifier]; [dbQualifier free]; [dbTableView display]; return self; } - fetch:sender { const char * newState; newState = (const char *)[inputField stringValue]; if ( !(strcmp(newState, "")) ) dbQualifier = nil; else dbQualifier = [[DBQualifier alloc] initForEntity:rootEntity fromDescription: "customer.state = %s", newState]; [dbFetchGroup fetchContentsOf:rootEntity usingQualifier:dbQualifier]; [dbQualifier free]; [dbTableView display]; return self; } - free { if (dbQualifier) [dbQualifier free]; if (dbExpression) [dbExpression free]; return[super free]; } /* DBDatabase delegate methods to log error messages and SQL queries */ - (BOOL)db:aDb willEvaluateString:(const char*)aString usingBinder:aBinder { fprintf(stderr, "SQL query:%s\n", aString); return YES; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.