|
:-DNo problem!
RageInTheMachine9532
|
|
|
|
|
ok i think iv got it.. at least up to my requirements.
by simply using folder options/file types and manually associating the file type with the app, and adding %1, or %[any number] to the parameter list, i can work with it.
i simply assign a value to System.Environment.CommandLine() and it returns the app path, and the file path which was opened with it. i was thinking way to complex. my next step is to determine how to auto. associate the file types with the app, editing the registry from the app.
Thanks.
------------------------
Jordan.
III
|
|
|
|
|
I wrote a dll in C++ that I'm now calling from a vb app. everything works fine as far as the function is concerned, but after I terminate the VB app I get a _crtisvalidheappointer assertion.
If it's broken, I probably did it
bdiamond
|
|
|
|
|
bdiamond wrote:
I wrote a dll in C++ that I'm now calling from a vb app.
If it's broken, I probably did it
It's broken, and yes, you did it.
The first place I'd look is the C++ .dll for resources not be cleared up before the .dll is unloaded. Also, I'd double check the types I've used calling the .dll and check to make sure the call types match. It might be that there is something being pushed onto the stack in the .dll and no being popped off. Could be tht your allocating memory in the .dll and no using the MATCHED free function to free that block of memory...
...could be a large range of things... Code samples would probably help.
RageInTheMachine9532
|
|
|
|
|
well, here's the entire function. I appreciate any help you can provide me with. thanks in advance!!
int Export(BSTR szServer, BSTR szDB, BSTR szUser, BSTR szPassword, BSTR szSQL)
{
int numOfRows=0;
int numOfFields=0;
int i=0,col=0;
int connected=0;
MYSQL *dbHandle;
MYSQL_RES *res;
MYSQL_FIELD *field;
MYSQL_ROW row;
char errmsg[512];
dbHandle=mysql_init((MYSQL*)0);
CString szDBFName;
CString strPath,strTblName;
try
{
CFileDialog dlg(FALSE,".DBF",NULL,OFN_ENABLESIZING | OFN_HIDEREADONLY,".dbf files (*.dbf)|*.dbf||");
if(dlg.DoModal() == IDOK)
{
szDBFName = dlg.GetPathName();
strTblName = dlg.GetFileName();
if((szDBFName.GetLength() || strTblName.GetLength() ) == 0)
{
AfxMessageBox("Export Canceled",MB_OK | MB_ICONINFORMATION);
return 0;
}
}
else
{
AfxMessageBox("Export Canceled",MB_OK | MB_ICONINFORMATION);
return 0;
}
int nPos = szDBFName.Find(strTblName,0);
strPath = szDBFName.Left(nPos);
if(mysql_real_connect(dbHandle,
(char*)szServer,
(char*)szUser,
(char*)szPassword,
(char*)szDB,
MYSQL_PORT,
NULL,
0))
{
connected=1;
}
else
{
sprintf(errmsg, "\nError: %s\n", mysql_error(dbHandle));
AfxMessageBox(errmsg);
connected = 0;
}
if(mysql_select_db(dbHandle,(char*)szDB))
{
sprintf(errmsg, "\nError: %s\n", mysql_error(dbHandle));
AfxMessageBox(errmsg);
return 0;
}
if(mysql_query(dbHandle,(char*)szSQL))
{
sprintf(errmsg, "\nError: %s\n", mysql_error(dbHandle));
AfxMessageBox(errmsg);
return 0;
}
res=mysql_store_result(dbHandle);
CDatabase *pDB = new CDatabase;
CString strConnect;
strConnect.Format("Driver={Microsoft dBASE Driver (*.dbf)};DriverID=533;Dbq=%s;",strPath);
pDB->OpenEx(strConnect);
CString sColumns;
numOfRows = (int) mysql_num_rows(res);
numOfFields= (int) mysql_num_fields(res);
int * nFieldLen = new int[numOfFields];
int * nFieldDesc = new int[numOfFields];
for (i=0;i<numOfFields;i++)
{
field=mysql_fetch_field(res);
int nType = field->type;
int nLen = (int)field->length;
CString sCol;
nFieldDesc[i] = nType;
nFieldLen[i] = nLen;
switch(nType)
{
case FIELD_TYPE_ENUM:
case FIELD_TYPE_TINY:
case FIELD_TYPE_SHORT:
sCol.Format("%s %s,",field->name,"INTEGER ");
break;
case FIELD_TYPE_LONG:
sCol.Format("%s %s,",field->name,"LONG ");
break;
case FIELD_TYPE_FLOAT:
case FIELD_TYPE_DECIMAL:
sCol.Format("%s %s,",field->name,"FLOAT ");
break;
case FIELD_TYPE_DOUBLE:
sCol.Format("%s %s,",field->name,"DOUBLE ");
break;
case FIELD_TYPE_NULL:
sCol.Format("%s %s,",field->name,"int ");
break;
case FIELD_TYPE_LONGLONG:
case FIELD_TYPE_INT24:
sCol.Format("%s %s,",field->name,"LONG ");
break;
case FIELD_TYPE_YEAR:
case FIELD_TYPE_DATE:
case FIELD_TYPE_NEWDATE:
case FIELD_TYPE_TIME:
case FIELD_TYPE_DATETIME:
case FIELD_TYPE_TIMESTAMP:
sCol.Format("%s %s,",field->name,"DATE ");
break;
case FIELD_TYPE_SET:
sCol.Format("%s %s,",field->name,"int ");
break;
case FIELD_TYPE_TINY_BLOB:
case FIELD_TYPE_MEDIUM_BLOB:
case FIELD_TYPE_LONG_BLOB:
case FIELD_TYPE_BLOB:
sCol.Format("%s %s,",field->name,"MEMO ");
break;
case FIELD_TYPE_VAR_STRING:
case FIELD_TYPE_STRING:
sCol.Format("%s TEXT(%d),",field->name,nLen);
break;
}
sColumns += sCol;
}
sColumns = sColumns.Left(sColumns.GetLength() - 1);
sColumns = "CREATE TABLE " + strTblName + " (" + sColumns + ")";
pDB->ExecuteSQL(sColumns);
CDBFRecordset* m_Set = 0;
m_Set = new CDBFRecordset;
m_Set->Open(szDBFName);
for(i=0;i<numOfRows;i++)
{
int MaxLen = 0;
CString sYear,sMonth,sDay,sTime,sHour,sMinute,sSecond;
row=mysql_fetch_row( res );
m_Set->AddNew();
for (col=0;col<numOfFields;col++)
{
BOOL bDate = FALSE;
BOOL bMemo = FALSE;
field=mysql_fetch_field(res);
int nType = nFieldDesc[col];
MaxLen = 512;
switch(nType)
{
case FIELD_TYPE_TINY_BLOB:
case FIELD_TYPE_MEDIUM_BLOB:
case FIELD_TYPE_LONG_BLOB:
case FIELD_TYPE_BLOB:
bMemo = TRUE;
MaxLen = 10000;
break;
}
char * msg = new char[MaxLen];
sprintf(msg,"%s",row[col]);
CString str = msg;
COleDateTime * t;
switch(nType)
{
case FIELD_TYPE_YEAR:
case FIELD_TYPE_DATE:
case FIELD_TYPE_NEWDATE:
case FIELD_TYPE_TIME:
case FIELD_TYPE_DATETIME:
case FIELD_TYPE_TIMESTAMP:
str.Remove('-');
int len = str.GetLength();
sYear = str.Mid(0,4);
sMonth = str.Mid(4,2);
sDay = str.Mid(6,2);
if(len > 8)
{
sHour = str.Mid(8,2);
sMinute = str.Mid(10,2);
sSecond = str.Mid(12,2);
}
else
{
sHour = sMinute = sSecond = "0";
}
bDate = TRUE;
t = new COleDateTime(atoi(sYear),
atoi(sMonth),atoi(sDay),atoi(sHour),atoi(sMinute),atoi(sSecond));
break;
}
COleVariant fVar;
if(bDate)
fVar = *t;
else
fVar = str;
delete [] msg;
m_Set->SetFieldValue(col,fVar);
}
m_Set->Update();
}
AfxMessageBox("before deletions");
mysql_free_result( res ) ;
m_Set->Close();
if(m_Set)
delete m_Set;
if(pDB)
delete pDB;
AfxMessageBox("after deletions");
return 1;
}
catch(CDBException* e)
{
e->ReportError();
e->Delete();
}
catch(CException* e)
{
e->ReportError();
e->Delete();
}
catch(...)
{
AfxMessageBox("Unhandled Error.",MB_OK | MB_ICONINFORMATION);
}
return 0;
}
If it's broken, I probably did it
bdiamond
|
|
|
|
|
Well, I've never used MySQL before, but since it pretty much follows MSSQL this shouldn't be a problem.
Something I've noticed with pDB is never told to Close. I'm assuming there is one considering there is an OpenEx(). And mysql_real_connect returned a dbhandle. I'm assuming there must be a function to close that handle and release the resources that it represents.
RageInTheMachine9532
|
|
|
|
|
I edited my code to include a dbHandle->free_me and a pDB->Close(), but I still get the same thing.
If it's broken, I probably did it
bdiamond
|
|
|
|
|
Are you using a Release compiled .DLL and a Debug compiled .EXE? Try compiling the thing entirely Debug or entirely Release and see what happens.
RageInTheMachine9532
|
|
|
|
|
the dll is a release compile, and .exe is made in VB
If it's broken, I probably did it
bdiamond
|
|
|
|
|
I've been doing a bunch of reading on the mySQL package. What version are you using? There seems to be a bug in some fairly recent releases that can cause this problem. I've also run into examples where when you first create the mySQL object, a default connection is created. You might want to try dropping/closing this connection first before your try to create a new one with your existing code.
RageInTheMachine9532
|
|
|
|
|
Hi
Hopefully someone can help me with this problem.
I have a 3 page workbook (report,data1,data2).
data1 and data2 are loaded as External Data from 2 csv files and are updated at 10 minute intervals. Both sheets have the same layout -:
Col A = date (i.e. 12-DEC-04) (as string)
Col B = reference (i.e. ABC1234) (as string)
Col C = value1 (as integer)
Col D = value2 (as integer)
Col E = value3 (as integer)
The report page has 3 columns.
Col A = date (as Date)
Col B = reference (as string)
Cols C - F = various values
Col G = valtotal (as integer)
I've written a function that takes in 4 parameters (ref,date,page,reqcol).
"page" sets which of the sheets is used for the info (data1 or data2).
"Reqcol" sets which column from the data sheet is reqd.
(e.g. Cell G4 on the report might be =vallookup(G1,A1,"data2","E"))
This has to loop over the data checking all references, and if it finds a match then check the date. If both match, it returns the value in column (reqcol).
The data size is not known until the data is refreshed (cell A1 contains the number of rows).
A variable, 'lastrow', is used as the number of rows and a number of loops is performed.
The function appears to work sometimes, but other times won't work - on the same data!
Also, I need to have an easy way to refresh the values returned by the funcion on the report page without having to hit 'Enter' on each cell.
Here is the function as it stands......
Public Function vallookup(ref As String, dateref As Date, page As String, reqcol As String)<br />
'Activate correct page sheet<br />
Worksheets(page).Activate<br />
'Get size of dataset<br />
lastrow = Worksheets(page).Cells(2, "A").Value<br />
'Loop data<br />
For a = 1 To lastrow<br />
If (UCase(ref) = UCase(Worksheets(page).Cells(a, "B").Value)) Then<br />
If (dateref = DateValue(Worksheets(page).Cells(a, "A").Value)) Then<br />
vallookup = Worksheets(page).Cells(a, reqcol).Value<br />
End If<br />
End If<br />
Next a<br />
End Function<br />
<br />
<br />
Sub Refresh()<br />
'Attempt at a Refresh function<br />
Worksheets("report").Calculate<br />
End Sub
|
|
|
|
|
I just started using WebMatrix and ASP.NET, and I have one problem - I like to know, how I can do it:
Situation - I have one page "Licence agreement" with Agree and Disagree; when user click Agree, then must open Registration form (I made it in that way: Response.Redirect("Reg.aspx")). So far is OK! But I need, that the form Reg.aspx opens only when in Licence form users click Agree - shortly - it (Reg) should no opens, when users write in adress bar http://www.xxxxx.com/Reg.aspx...
Sorry for my english, but I hope that U understood my problem. I use VB.NET
|
|
|
|
|
Why not have them on the same page and skip the Agree/Disagree buttons. Put into your License Agreement that submitting a registration automatically agrees with license?
But, you could drop a small flag into the Session object, in the Agree button click event, that is read by the Reg.aspx Page_Load event. In there, if the flag is not set, redirect them back to the License page.
In your License page AgreeButton_Click handler:
Session("License") = "Accepted"
And in your Registration Page_Load event handler:
If Session("License") <> "Accepted" Then
Response.Redirect("...URL to License Page...")
End If
RageInTheMachine9532
|
|
|
|
|
I don't think using a session variable would be the best solution. I would do one of two things:
(1) Check the page the user came from
If Request.ServerVariables("http_referer") <> "LicensePage.aspx" Then
' send user to another page or show an error
End If Or...
(2) Show/Hide panels upon agree/disagree
Within your ASPX page:
<asp:Panel id="LicensePanel" runat="server">
...
<asp:Button id="AgreeButton" Text="Agree" runat="server" />
<asp:Button id="DisagreeButton" Text="Disagree" runat="server" />
</asp:Panel">
<asp:Panel id="AgreePanel" Visible="false" runat="server">
You agreed! :)
</asp:Panel">
<asp:Panel id="DisagreePanel" Visible="false" runat="server">
You disagreed! :(
</asp:Panel"> And, within your AgreeButton_Click :
LicensePanel.Visible = False
AgreePanel.Visible = True And, finally, within your DisagreeButton_Click :
LicensePanel.Visible = False
DisagreePanel.Visible = True Now, personally, I'd prefer the second option over the first, but that kind of depends on how much functionality you want on the page. I'll leave that up to you.
Hope this helps!
Michael Flanakin
Web Log
|
|
|
|
|
Just something off the top of my head. I haven't been doing much ASP.NET so my solution most likely isn't the best, but it works...
Your solutions are much better. Thanks for the tips!
RageInTheMachine9532
|
|
|
|
|
Both of our solutions will work just fine. Using session variables, however, could lead to scalability problems in the long run. It's best to try to avoid them as a good practice.
Michael Flanakin
Web Log
|
|
|
|
|
I found a game assistance program posted on the web that I would very much like to use. It is written in BASIC. Ya'll may get a good laugh out of this, but I tried copying it into a windows folder and then renaming the folder "Ironclads.exe". I get an error telling me it is not a valid win 32 application...The addy to the game assistance program: ftp://www.grognard.com/pub/games/board/ironclad.txt
Anybody got any ideas? I am running Win95 on this particular computer? You can contact me at hanksteph@houston.rr.com Regards, Hank Smith
|
|
|
|
|
hmssws wrote:
I tried copying it into a windows folder and then renaming the folder "Ironclads.exe". I get an error telling me it is not a valid win 32 application...
What??? Renaming a folder will never generate this error.
I took a look at what you got from the board. It's an old QBASIC program. Just renaming it to an .EXE will NOT work. You have to load the thing into QBASIC and run it from there. You can't compile the thing under VB6 or VB.NET unless you rewrite the code.
Since your running Windows 95, you shouldn't have a problem running QBASIC, just open a command prompt and type QBASIC. QBASIC no longer comes with Windows 2000 and above.
RageInTheMachine9532
|
|
|
|
|
i have 4 columns in my datagrid which at the moment are displaying "yes" or "no". My boss wants these existing columns to display checkboxes instead. Ive tried really hard to find a solution to this problem but so far nothing has worked Any help would be greatly appreciated - getting desparate now!!
Chrissy Callen
|
|
|
|
|
DataGridCheckBoxColumn class is there in the API. What is the problem for u in using it?
|
|
|
|
|
basically im very new to this i need code examples to help me figure it out. How exactly do i apply DataGridCheckBoxColumn to any particular column that already exists in my datagrid??
Chrissy Callen
|
|
|
|
|
Sorry it is DataGridBoolColumn class.
An example is available in MSDN. Just I m giving it below..
using System;
using System.Data;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;
public class MyForm : Form
{
private DataTable myTable;
private DataGrid myGrid = new DataGrid();
public MyForm() : base()
{
try
{
InitializeComponent();
myTable = new DataTable("NamesTable");
myTable.Columns.Add(new DataColumn("Name"));
DataColumn column = new DataColumn
("id", typeof(System.Int32));
myTable.Columns.Add(column);
myTable.Columns.Add(new
DataColumn("calculatedField", typeof(bool)));
DataSet namesDataSet = new DataSet();
namesDataSet.Tables.Add(myTable);
myGrid.SetDataBinding(namesDataSet, "NamesTable");
AddTableStyle();
AddData();
}
catch (System.Exception exc)
{
Console.WriteLine(exc.ToString());
}
}
private void grid_Enter(object sender, EventArgs e)
{
myGrid.CurrentCell = new DataGridCell(2,2);
}
private void AddTableStyle()
{
// Map a new TableStyle to the DataTable. Then
// add DataGridColumnStyle objects to the collection
// of column styles with appropriate mappings.
DataGridTableStyle dgt = new DataGridTableStyle();
dgt.MappingName = "NamesTable";
DataGridTextBoxColumn dgtbc = new DataGridTextBoxColumn();
dgtbc.MappingName = "Name";
dgtbc.HeaderText= "Name";
dgt.GridColumnStyles.Add(dgtbc);
dgtbc = new DataGridTextBoxColumn();
dgtbc.MappingName = "id";
dgtbc.HeaderText= "id";
dgt.GridColumnStyles.Add(dgtbc);
DataGridBoolColumn db =
new DataGridBoolColumn();
db.HeaderText= "less than 1000 = blue";
db.Width= 150;
db.MappingName = "calculatedField";
dgt.GridColumnStyles.Add(db);
myGrid.TableStyles.Add(dgt);
// This expression instructs the grid to change
// the color of the inherited DataGridBoolColumn
// according to the value of the id field. If it's
// less than 1000, the row is blue. Otherwise,
// the color is yellow.
db.Expression = "id < 1000";
}
private void AddData()
{
// Add data with varying numbers for the id field.
// If the number is over 1000, the cell will paint
// yellow. Otherwise, it will be blue.
DataRow dRow = myTable.NewRow();
dRow["Name"] = "name 1 ";
dRow["id"] = 999;
myTable.Rows.Add(dRow);
dRow = myTable.NewRow();
dRow["Name"] = "name 2";
dRow["id"] = 2300;
myTable.Rows.Add(dRow);
dRow = myTable.NewRow();
dRow["Name"] = "name 3";
dRow["id"] = 120;
myTable.Rows.Add(dRow);
dRow = myTable.NewRow();
dRow["Name"] = "name 4";
dRow["id"] = 4023;
myTable.Rows.Add(dRow);
dRow = myTable.NewRow();
dRow["Name"] = "name 5";
dRow["id"] = 2345;
myTable.Rows.Add(dRow);
myTable.AcceptChanges();
}
private void InitializeComponent()
{
this.Size = new Size(500, 500);
myGrid.Size = new Size(350, 250);
myGrid.TabStop = true;
myGrid.TabIndex = 1;
this.StartPosition = FormStartPosition.CenterScreen;
this.Controls.Add(myGrid);
}
[STAThread]
public static void Main()
{
MyForm myGridForm = new MyForm();
myGridForm.ShowDialog();
}
}
|
|
|
|
|
thanks but is there any chance of having this in vb.net code please??
Chrissy Callen
|
|
|
|
|
Imports System
Imports System.Data
Imports System.Windows.Forms
Imports System.Drawing
Imports System.ComponentModel
Public Class MyForm
Inherits System.Windows.Forms.Form
Private components As System.ComponentModel.Container
Private myTable As DataTable
Private myGrid As DataGrid = New DataGrid
Public Shared Sub Main()
Application.Run(New MyForm)
End Sub
Public Sub New()
Try
InitializeComponent()
myTable = New DataTable("NamesTable")
myTable.Columns.Add(New DataColumn("Name"))
Dim column As DataColumn = New DataColumn _
("id", GetType(System.Int32))
myTable.Columns.Add(column)
myTable.Columns.Add(New DataColumn _
("calculatedField", GetType(Boolean)))
Dim namesDataSet As DataSet = New DataSet("myDataSet")
namesDataSet.Tables.Add(myTable)
myGrid.SetDataBinding(namesDataSet, "NamesTable")
AddData()
AddTableStyle()
Catch exc As System.Exception
Console.WriteLine(exc.ToString)
End Try
End Sub
Private Sub AddTableStyle()
' Map a new TableStyle to the DataTable. Then
' add DataGridColumnStyle objects to the collection
' of column styles with appropriate mappings.
Dim dgt As DataGridTableStyle = New DataGridTableStyle
dgt.MappingName = "NamesTable"
Dim dgtbc As DataGridTextBoxColumn = _
New DataGridTextBoxColumn
dgtbc.MappingName = "Name"
dgtbc.HeaderText = "Name"
dgt.GridColumnStyles.Add(dgtbc)
dgtbc = New DataGridTextBoxColumn
dgtbc.MappingName = "id"
dgtbc.HeaderText = "id"
dgt.GridColumnStyles.Add(dgtbc)
Dim db As DataGridBoolColumnInherit = _
New DataGridBoolColumnInherit
db.HeaderText = "less than 1000 = blue"
db.Width = 150
db.MappingName = "calculatedField"
dgt.GridColumnStyles.Add(db)
myGrid.TableStyles.Add(dgt)
' This expression instructs the grid to change
' the color of the inherited DataGridBoolColumn
' according to the value of the id field. If it's
' less than 1000, the row is blue. Otherwise,
' the color is yellow.
'db.Expression = "id < 1000"
End Sub
Private Sub AddData()
' Add data with varying numbers for the id field.
' If the number is over 1000, the cell will paint
' yellow. Otherwise, it will be blue.
Dim dRow As DataRow
dRow = myTable.NewRow()
dRow("Name") = "name 1"
dRow("id") = 999
myTable.Rows.Add(dRow)
dRow = myTable.NewRow()
dRow("Name") = "name 2"
dRow("id") = 2300
myTable.Rows.Add(dRow)
dRow = myTable.NewRow()
dRow("Name") = "name 3"
dRow("id") = 120
myTable.Rows.Add(dRow)
dRow = myTable.NewRow()
dRow("Name") = "name 4"
dRow("id") = 4023
myTable.Rows.Add(dRow)
dRow = myTable.NewRow()
dRow("Name") = "name 5"
dRow("id") = 2345
myTable.Rows.Add(dRow)
myTable.AcceptChanges()
End Sub
Private Sub InitializeComponent()
Me.Size = New Size(500, 500)
myGrid.Size = New Size(350, 250)
myGrid.TabStop = True
myGrid.TabIndex = 1
Me.StartPosition = FormStartPosition.CenterScreen
Me.Controls.Add(myGrid)
End Sub
End Class
|
|
|
|
|
that was quick im very impressed..thank you..will give that a go right now.
Chrissy Callen
|
|
|
|
|