我使用的是Delphi XE2,我遇到了TClientDataset.Locate方法的问题。它只会定位#include <stdio.h> // perror(), printf(), fprintf(),
// fgets(), fputs(),
// fopen(), fclose()
#include <stdlib.h> // system(), exit(), EXIT_FAILURE
#include <string.h> // strlen(), strchr()
#define MAX_NOME_LEN 30
// prototypes
void inslivros( void );
int main( void )
{
int escolha = 1;
system("cls");
while( escolha )
{
printf("1- Adicionar livro\n"
"0- Voltar para o menu\n-> ");
if( 1 != scanf( "%d", &escolha) )
{
fprintf( stderr, "scanf for escolha failed\n" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
switch(escolha)
{
case 1:
inslivros();
break;
case 0:
puts( "exiting" );
break;
default: // user entered an invalid menu selection
puts( "invalid menu selection, try again" );
break;
} // end switch()
} // end while()
} // end function: main
void inslivros()
{
char livro[ MAX_NOME_LEN ];
int categoria;
printf( "Qual é o nome do livro que vai inserir?\n-> " );
//gets(livro);
if( ! fgets( livro, sizeof livro, stdin ) )
{
perror( "fgets for line to insert failed" );
exit( EXIT_FAILURE );
}
// implied else, fgets successful
// remove trailing newline
char * newline;
if( (newline = strchr( livro, '\n' ) ) )
{
*newline = '\0';
}
printf( "Qual é a categoria do livro?\n"
"1- Romance\n"
"2- História\n-> " );
if( 1 != scanf("%d", &categoria) )
{
fprintf( stderr, "scanf to input the 'categoria' failed\n" );
exit( EXIT_FAILURE );
}
//implied else, scanf successful
FILE *livros = NULL;
switch( categoria )
{
case 1:
if( ! (livros = fopen("C:\\Livros\\inserelivros.txt", "a") ) )
{
perror( "fopen for inserelivros.txt failed" );
exit( EXIT_FAILURE );
}
// implied else, fopen successful
fputs(livro, livros);
fclose(livros);
FILE *romance;
if( !(romance = fopen("C:\\Livros\\romance.txt", "a")) )
{
perror( "fopen for romance.txt failed" );
exit( EXIT_FAILURE );
}
// implied else, fopen successful
fputs( livro, romance );
fclose( romance );
system("cls");
printf( "Livro inserido com Sucesso!\n" );
break;
case 0:
printf( "Historia not yet implemented\n" );
break;
default:
system("cls");
//printf("Nome inválido!\n");
printf( "invalid menu selection\n" );
break;
} // end switch()
} // end function: inslivros
是否作为参数传递。在其他情况下,即使记录确实存在,它也不会找到记录。这是一段代码:
loPartialKey
result := lSysEq.Locate('IDIV;CODE_EQ',VarArrayOf([aDiv,aEqCode]),[]));
和aDiv
是字符串类型,aEqCode
是lSysEq
。我不相信我做错了什么,而且我已经分解到了最基本的应用程序。我仍然找不到合适的记录。