void Search(void *arg)
{
SQLRESULT *newRow, *prevRow = NULL;
SQLRESFIELD *rf, *newField, *prevField;
MYSQL_ROW row;
int i, fc, first;
char *p, *s;
SQLFIELD *f;
HWND focus;
VARS *v = (VARS*)arg;
v->sqlCmdActive = TRUE;
ShowStatus(v->hwndStatus, 0, "Processing...");
sprintf(v->buf, "SELECT * FROM %s", v->table);
first = 1;
for (i = 0, f = v->fields; i < v->nFields;
i++, f = f->next) {
s = GetText(v, i);
if (strlen(s)) {
if (! first)
strcat(v->buf, " AND ");
else
strcat(v->buf, " WHERE ");
first = 0;
sprintf(v->buf2, "%s LIKE '%s'", f->name, s);
strcat(v->buf, v->buf2);
}
}
sprintf(v->buf2, " ORDER BY %s", v->order);
strcat(v->buf, v->buf2);
if (! SQLQuery(0, v->buf))
goto end;
while (v->result) {
rf = v->result->fields;
while (rf) {
free(rf->data);
p = (char*)rf;
rf = rf->next;
free(p);
}
p = (char*)v->result;
v->result = v->result->next;
free(p);
}
if (! newRow->fields)
newRow->fields = newField;
if (prevField)
prevField->next = newField;
prevField = newField;
}
newRow->next = NULL;
if (! v->result)
v->result = newRow;
if (prevRow)
prevRow->next = newRow;
prevRow = newRow;
v->numRows++;
}
SQLEndQuery(0);
ShowStatus(v->hwndStatus, 0, "");
if (! v->numRows) {
ShowStatus(v->hwndStatus, 0, "No rows found");
goto end;
}
v->rowNum = 0;
SetFields(v);
end:
v->sqlCmdActive = FALSE;
}
void AddRow(VARS *v)
{
int empty = 1;
int i, first;
char *s;
if (Empty(v))
return;
if (! Prompt(v->hwndMain, "Add Row", "Add row?", 1))
return;
sprintf(v->buf, "INSERT INTO %s VALUES (", v->table);
first = 1;
for (i = 0; i < v->nFields; i++) {
if (! first)
strcat (v->buf, ", ");
first = 0;
s = GetText(v, i);
sprintf(v->buf2, "'%s'", s);
strcat(v->buf, v->buf2);
}
strcat(v->buf, ")");
SQLQuery(0, v->buf);
}
void DeleteRow(VARS *v)
{
char *p;
int i, first;
SQLFIELD *f;
SQLRESULT *row, *prevRow = NULL;
SQLRESFIELD *rf;
char *s;
if (! v->result)
return;
if (Empty(v))
return;
if (! Prompt(v->hwndMain, "Delete Row", "Delete row?", 0))
return;
sprintf(v->buf, "DELETE FROM %s WHERE ", v->table);
first = 1;
for (i = 0, f = v->fields; i < v->nFields;
i++, f = f->next) {
s = GetText(v, i);
if (strlen(s)) {
if (! first)
strcat(v->buf, " AND ");
first = 0;
sprintf(v->buf2, "%s='%s'", f->name, s);
strcat(v->buf, v->buf2);
}
}
if (! SQLQuery(0, v->buf))
return;
for (i = 0, row = v->result; i < v->rowNum; i++, row = row->next)
prevRow = row;
if (prevRow)
prevRow->next = row->next;
else
v->result = v->result->next;
rf = row->fields;
while (rf) {
free(rf->data);
p = (char*)rf;
rf = rf->next;
free(p);
}
free(row);
v->numRows--;
if (v->rowNum > 0)
v->rowNum--;
if (v->numRows)
SetFields(v);
else
ClearFields(v);
}
if (! Prompt(v->hwndMain, "Update Row", "Update row?", 1))
return;
sprintf(v->buf, "UPDATE %s SET ", v->table);
first = 1;
for (i = 0, f = v->fields; i < v->nFields;
i++, f = f->next) {
s = GetText(v, i);
if (! first)
strcat(v->buf, ", ");
first = 0;
sprintf(v->buf2, "%s='%s'", f->name, s);
strcat(v->buf, v->buf2);
}
strcat(v->buf, " WHERE ");
for (i = 0, row = v->result; i < v->rowNum; i++)
row = row->next;
first = 1;
for (i = 0, f = v->fields, rf = row->fields;
i < v->nFields;
i++, f = f->next, rf = rf->next) {
s = rf->data;
if (strlen(s)) {
if (! first)
strcat(v->buf, " AND ");
first = 0;
sprintf(v->buf2, "%s='%s'", f->name, s);
strcat(v->buf, v->buf2);
}
}